gpt4 book ai didi

Python IMAP : Cannot mark email as seen

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:18 27 4
gpt4 key购买 nike

我正在尝试使用 Python IMAP 库将电子邮件设置为已读。就像在这个例子中一样: Python, IMAP and GMail. Mark messages as SEEN

我选择一个 GMail 帐户的“所有邮件”文件夹,然后通过搜索命令获取特定邮件的 UID。然后我使用该 UID 尝试将其标记为已读,但失败了。

    result, data = mail.uid('fetch', email_uid, '(FLAGS)')

print "RESULT: ",result,data

mail.select(folder_name, readonly=False)
result, data = mail.store(email_uid, '+FLAGS', '\\Seen')

print "RESULT OF OPERATION FOR UID",email_uid,result,data

无论我运行这段代码多少次,我总是获得不包含\Seen 标志的标志。

示例执行(忽略 Django 打印):

FINAL QUERY: (SENTSINCE 07-Mar-2013 SENTBEFORE 11-Mar-2013 LARGER 7508 SMALLER 7510)
RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk))']
RESULT OF OPERATION FOR UID 54264 OK [None]

[09/Mar/2013 17:30:37] "GET /api/mark_as_read/320/?token=8e3c057b841b75c864685786b2a9657aadf17e3bfb991b103b7c4b3ffdd2a753&refresh_mode=all&folder_mode=inbox HTTP/1.1" 200 144
FINAL QUERY: (SENTSINCE 07-Mar-2013 SENTBEFORE 11-Mar-2013 LARGER 7508 SMALLER 7510)
RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk))']
RESULT OF OPERATION FOR UID 54264 OK [None]

[09/Mar/2013 17:30:44] "GET /api/mark_as_read/320/?token=8e3c057b841b75c864685786b2a9657aadf17e3bfb991b103b7c4b3ffdd2a753&refresh_mode=all&folder_mode=inbox HTTP/1.1" 200 144
FINAL QUERY: (SENTSINCE 07-Mar-2013 SENTBEFORE 11-Mar-2013 LARGER 7508 SMALLER 7510)
RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk \\Seen))']
RESULT OF OPERATION FOR UID 54264 OK [None]

我尝试了多种变体。我尝试设置标志\Seen, Seen,\Seen, SEEN,带括号,不带括号,除了这个我不知道我可以尝试什么。

我怀疑这里可能有一些非常具体的细节——也许 GMail 的“所有电子邮件”文件夹不允许将电子邮件标记为已读?

我也不知道,在 mail.store 命令返回的 (result,data) 元组中,数据变量是否应该具有正常执行的“[None]”变量,或者它是否表示有问题。

如果我尝试设置错误的标志,如\\Seen,mail.store 命令会引发错误。所以当设置\Seen 标志时,它是一个有效的 IMAP 标志。

我不知道接下来要尝试什么。

如有任何帮助,我们将不胜感激。

最佳答案

IMAP specification for the STORE command没有通过 UID 设置标志的选项。您只能通过 message set 设置它们(就像在您链接到的示例中一样)。
有时起作用的唯一原因是您的 UID 和消息集的序列相对接近(31424 vs 54264)。

RESULT:  OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk))']

您实际上从未通过UID 设置标志,您是通过消息集 设置它们...偶尔对应到 UID


不过,您可以通过UID 设置标志(只是不能使用STORE 命令)。您可以发出 UID Command第一个参数是 store 来设置标志:

result, data = mail.uid('store', '542648', '+FLAGS', '(\\Seen)')  

如果成功,服务器将使用与您使用的 UID 相对应的消息集进行响应-例如(使用您的示例):

OK ['31424 (FLAGS (\\Seen))']

关于Python IMAP : Cannot mark email as seen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com