【问题标题】:Python IMAPClient - fetching UIDPython IMAPClient - 获取 UID
【发布时间】:2017-08-05 21:57:22
【问题描述】:

我在我的 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 的正确方法是什么?

【问题讨论】:

    标签: python imap imapclient


    【解决方案1】:

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

    IMAPClient 构造函数的use_uid 参数和use_uid 属性可用于切换行为。当use_uidTrue 时,所有接受或返回消息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

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2017-12-04
      • 2016-06-23
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多