Python IMAPClient - 获取 UID

Python IMAPClient - fetching UID

我在我的 Django 电子邮件客户端中使用 IMAPClient,目前我正在尝试通过以下代码获取给定邮箱中前五十封邮件的 UID:

server = IMAPClient(HOST, use_uid=True, ssl=True)
server.login(USERNAME, PASSWORD)
server.select_folder(folder_name)
messages = server.search(['NOT DELETED', '1:50']) 
response = server.fetch(messages, ['UID'])

然后我希望通过以下命令获取唯一消息标识符:

for data in response.items():
    data[b'UID']

但我最终遇到了键错误 - 数据没有名为 'UID' 的键。 我究竟做错了什么?通过 IMAPClient 获取消息 UID 的正确方法是什么?

IMAPClient 默认使用 UID。这意味着默认情况下,由 search() 编辑的消息 ID return 是 UID。无需单独查询UID

IMAPClient 构造函数的 use_uid 参数和 use_uid 属性可用于切换行为。当 use_uidTrue 时,所有接受或 return 消息 ID 的方法都使用 UID。 fetch() 还将消息序列作为 SEQ 项包含在内。

use_uidFalse 时,fetch() 接受消息序列,但您可以查询 UIDs.

示例:

server = IMAPClient(HOST, use_uid=True, ssl=True)
server.login(USERNAME, PASSWORD)
server.select_folder(folder_name)

messages = server.search(...)
# messages contains UIDs

r = server.fetch(messages, [...])
for uid, data in r.items():
    print(uid, data[b'SEQ'])   # show UID & message sequence

server.use_uid = False

messages = server.search(...)
# messages contains sequence numbers (not UIDs)

r = server.fetch(messages, ['UID'])
for seq, data in r.items():
    print(seq, data[b'UID'])   # show message sequence & UID

更多信息:https://imapclient.readthedocs.io/en/2.1.0/concepts.html#message-identifiers