0

我在我的 Django 电子邮件客户端中使用IMAPClient,目前我正在尝试通过以下代码获取给定邮箱中前 50 封邮件的 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']

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

4

1 回答 1

2

IMAPClient 默认使用 UID。这意味着默认情况下,返回的消息 IDsearch() UID。无需单独查询 UID。

use_uidIMAPClient 构造函数的参数和use_uid属性可用于切换行为。何时所有接受或返回消息 ID 的方法都可以使用 UID use_uid。还包括作为项目的消息序列。Truefetch()SEQ

何时use_uidFalsefetch()接受消息序列,但您可以查询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

于 2017-08-06T21:25:17.360 回答