IMAP: от UID сообщения до имени папки?

Я подключаюсь к серверу IMAP с Python.

У меня есть UID специального сообщения.

Есть ли способ получить имя папки, содержащей этот UID?

Или UID/ сообщение может находиться в нескольких папках? Затем я хотел бы получить список папок, к которым принадлежит это сообщение.

Или я что-то не так понял. UID всегда является локальным для папки IMAP. Он действителен только в контексте папки.

Я использую ImapClient для подключения к серверу IMAP. Но на этом уровне все языки и их привязки должны быть одинаковыми (я думаю).

2 ответа

UID не уникален между папками. Только трио (имя папки, uid validity, uid) гарантированно будет уникальным.

В большинстве серверных программ (особенно в традиционных серверах UNIX IMAP) идентификаторы создаются монотонно по возрастанию в каждой папке и перекрываются. То есть первое сообщение в любой папке - это UID 1, второе - UID 2 и так далее. Очевидно Отправлено:UID-1 не совпадает с сообщением Входящие:UID-1.

Некоторые серверы действительно генерируют уникальные UID учетной записи (например, Yahoo), но это исключение, а не норма.

Gmail имеет дополнительный атрибут, который является уникальным для учетной записи, X-GM-MSGID, который описан в их документе расширений IMAP.

Я нашел ответ сам:

http://www.limilabs.com/blog/unique-id-in-imap-protocol

Для идентификации сообщения во всех папках вам понадобятся 3 переменные: UID, имя папки и FolderStatus.UIDValidity.

...

На большинстве современных серверов FolderStatus.UIDValidity меняется редко. Однако клиент, который запоминает UID сообщения между сеансами, должен иметь дело с таким изменением и действовать соответственно.

Результат: вы не можете получить имя папки из UID.

Другие вопросы по тегам