В IMAP нет такой вещи, как номер сообщения магазина , поэтому я предполагаю, что вы использовали этот термин в разговорной речи для любого числа, однозначно идентифицирующего сообщение. Если я прав в этом предположении, вам не повезло: такого числа тоже нет, по крайней мере, в сеансах IMAP.
Вот что вы можете попробовать: протокол IMAP требует, чтобы каждое сообщение имело уникальный идентификатор , а каждый почтовый ящик имел значение достоверности уникального идентификатора . Сочетание уникального идентификатора и значения достоверности уникального идентификатора почтового ящика сообщения гарантированно никогда не будет ссылаться на разные сообщения. Поэтому, если вы используете это для идентификации сообщений, вы, по крайней мере, гарантированно не случайно удалите неправильное сообщение.
Проблема в том, что значение достоверности уникального идентификатора гарантированно останется неизменным только в течение сеанса IMAP. PHP обычно создает новый сеанс IMAP с каждым запросом страницы и закрывает сеанс в конце запроса. С другой стороны, спецификация IMAP предполагает, что уникальные идентификаторы остаются неизменными даже во время сеансов. Это делает следующий подход практичным:
- Идентифицировать сообщения по уникальному идентификатору (например, используя их в качестве атрибутов-значений в флажках, используемых для выбора сообщений).
- Сохраните значение срока действия уникального идентификатора *1023* почтового ящика в виде скрытого поля в форме.
- При обработке отправленных форм проверьте, совпадает ли значение срока действия уникального идентификатора *1027*, отправленное через форму, с текущим.
- Осторожно : существуют серверы IMAP, которые используют разные значения срока действия уникального идентификатора для каждого сеанса. Вы не сможете сделать ничего полезного, если у вас будет такая реализация.
Вы можете получить текущее значение действительности уникального идентификатора , вызвав imap_mailboxmsginfo . Большинство других функций из расширения IMAP PHP имеют параметр $options
, который можно использовать, указав, что вы используете уникальный идентификатор вместо порядковый номер сообщения (другое средство для идентификации сообщения, которые даже более нестабильны, чем уникальный идентификатор ).
См. RFC 3501 для получения подробной информации о протоколе IMAP, особенно 2.3.1 Номера сообщений .