2015-09-23 4 views
0

Я подключаюсь к серверу IMAP с Python.IMAP: из UID сообщения в имя папки?

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

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

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

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

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

ответ

1

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

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

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

...

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

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

+0

То, что вы цитируете, говорит о противоположности вашего заключения. – Max

+0

@max Спасибо! Это была опечатка. Я починил это. Конечно, я имел в виду «Ты ** не можешь ** получить имя папки из UID». – guettli

2

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

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

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

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