IMAP: PHP: Как я могу получить и сохранить номер сообщения для удаления определенной почты - PullRequest
1 голос
/ 01 января 2011

Мне нужно прочитать почтовый ящик на моем сервере, используя IMAP, затем я должен показать некоторые письма (письма с предопределенным содержимым) на сайте для администратора. Позже администратор может удалять или перемещать почту из панели администратора, но как удалить или сдвинуть конкретную почту из админки? Есть ли способ сохранить идентификатор сообщения в почте? Как я могу получить идентификатор определенного письма во входящей почте?

Большое спасибо за ваше время

1 Ответ

1 голос
/ 01 января 2011

В IMAP нет такой вещи, как номер сообщения магазина , поэтому я предполагаю, что вы использовали этот термин в разговорной речи для любого числа, однозначно идентифицирующего сообщение. Если я прав в этом предположении, вам не повезло: такого числа тоже нет, по крайней мере, в сеансах IMAP.

Вот что вы можете попробовать: протокол IMAP требует, чтобы каждое сообщение имело уникальный идентификатор , а каждый почтовый ящик имел значение достоверности уникального идентификатора . Сочетание уникального идентификатора и значения достоверности уникального идентификатора почтового ящика сообщения гарантированно никогда не будет ссылаться на разные сообщения. Поэтому, если вы используете это для идентификации сообщений, вы, по крайней мере, гарантированно не случайно удалите неправильное сообщение.

Проблема в том, что значение достоверности уникального идентификатора гарантированно останется неизменным только в течение сеанса IMAP. PHP обычно создает новый сеанс IMAP с каждым запросом страницы и закрывает сеанс в конце запроса. С другой стороны, спецификация IMAP предполагает, что уникальные идентификаторы остаются неизменными даже во время сеансов. Это делает следующий подход практичным:

  1. Идентифицировать сообщения по уникальному идентификатору (например, используя их в качестве атрибутов-значений в флажках, используемых для выбора сообщений).
  2. Сохраните значение срока действия уникального идентификатора *1023* почтового ящика в виде скрытого поля в форме.
  3. При обработке отправленных форм проверьте, совпадает ли значение срока действия уникального идентификатора *1027*, отправленное через форму, с текущим.
  4. Осторожно : существуют серверы IMAP, которые используют разные значения срока действия уникального идентификатора для каждого сеанса. Вы не сможете сделать ничего полезного, если у вас будет такая реализация.

Вы можете получить текущее значение действительности уникального идентификатора , вызвав imap_mailboxmsginfo . Большинство других функций из расширения IMAP PHP имеют параметр $options, который можно использовать, указав, что вы используете уникальный идентификатор вместо порядковый номер сообщения (другое средство для идентификации сообщения, которые даже более нестабильны, чем уникальный идентификатор ).

См. RFC 3501 для получения подробной информации о протоколе IMAP, особенно 2.3.1 Номера сообщений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...