Проблемы с различными почтовыми ящиками IMAP
Я работаю над менеджером электронной почты, который может управлять несколькими почтовыми ящиками. Это мой сценарий: я получаю письма по почтовому ящику и сохраняю их свойства в базе данных, включая uid. Почтовый ящик можно настроить для загрузки по протоколу imap или pop3, это зависит от самого почтового ящика.
Идентификаторы POP3: уникальный идентификатор сообщения - это произвольная определяемая сервером строка, состоящая из от 1 до 70 символов в диапазоне от 0x21 до 0x7E, которая однозначно идентифицирует сообщение в почтовом ящике и сохраняется в сеансах.
UID IMAP: 32-разрядное значение, назначаемое каждому сообщению, которое при использовании со значением достоверности уникального идентификатора (см. Ниже) образует 64-разрядное значение, которое НЕ ДОЛЖНО ссылаться на любое другое сообщение в почтовом ящике или любом последующем почтовом ящике с таким же имя навсегда.
Таким образом, почти невозможно найти два одинаковых идентификатора POP3, хотя между разными почтовыми ящиками. Но более вероятно случится с uid IMAP.
Итак, мне нужна уверенность, что все идентификаторы различны. Мне не нужен код, чтобы сделать это, мне нужно только знать, возможно ли это сделать, и как это сделать, необходимость правильных рассуждений.
1 ответ
Стандарт POP3 не гарантирует уникальность UID - вы можете видеть разные сообщения с общим UID.
IMAP не имеет постоянных UID, которые бы работали так, как вы хотите, чтобы они работали. UID гарантированно будут уникальными в пределах одного почтового ящика, но при определенных обстоятельствах они могут измениться (см. RFC 3501 и ответ UIDVALIDITY). Короче говоря, единственная гарантия, которую предоставляет IMAP, это то, что триплет (mailbox name, UIDVALIDITY, UID)
будет когда-либо ссылаться на одно сообщение, независимо от того, что произойдет. Это полезно, например, для кэширования частей сообщения, поскольку они гарантированно являются неизменяемыми. Пожалуйста, постарайтесь понять, что это не означает, что одному сообщению всегда будет назначаться один и тот же триплет - совсем нет, даже если оно остается в одном и том же почтовом ящике.
Существуют нестандартные расширения, которые пытаются предоставить какой-то GUID для вас, но они отличаются в разных реализациях сервера IMAP и не доступны везде.