首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python imaplib -将电子邮件标记为未读或不可见

python imaplib -将电子邮件标记为未读或不可见
EN

Stack Overflow用户
提问于 2013-06-28 22:52:44
回答 4查看 15.5K关注 0票数 8

在这里和互联网上搜索,有很多关于如何将消息标记为可见的示例,即使这是使用imap自动执行的。

但是,我如何将电子邮件标记为UNSEENUNREAD呢?

我有一个用python编写的脚本,它可以接收UNSEEN消息,它工作得很好。但在读取它们之后,imap会自动将它们标记为SEEN,但只有在脚本没有错误的情况下才能正常工作,因为如果它引发异常,我希望电子邮件再次标记为UNSEEN,所以下一次脚本将再次读取该消息。

我怎样才能做到这一点呢?

我也使用了mail.select(mail_label,readonly=True),但它没有帮助,因为我不能将消息标记为SEEN,这也是我需要的。我也希望它能和Gmail一起工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-28 23:22:40

您可以使用以下命令轻松清除\Seen标志:

代码语言:javascript
运行
复制
tag UID STORE -FLAGS (\Seen)

但是,如果您只在成功处理消息后的第一个位置设置\Seen标志,那么您的软件可能会有更多的robost。这样,如果在处理消息时出现任何错误(即使与IMAP服务器的连接断开),该标志也将保持未设置状态,并且您可以在下次运行脚本时重试该消息。您可以通过使用BODY.PEEK而不是BODY来避免IMAP服务器自动设置\Seen标志。

在Python中,我认为应该像这样发出STORE命令,但我还没有尝试过。

代码语言:javascript
运行
复制
connection.uid('STORE', '-FLAGS', '(\Seen)')
票数 11
EN

Stack Overflow用户

发布于 2014-01-31 19:55:08

在Python中,imaplib模块将STORE描述为:

代码语言:javascript
运行
复制
(typ, [data]) = <instance>.store(message_set, command, flags)

因此,下面这行代码允许您根据需要将消息设置为已读(‘+标志’)或未读(‘-标志’)。

代码语言:javascript
运行
复制
connection.uid('STORE', MESSAGE_ID, '+FLAGS', '\SEEN')

正如您所看到的,这些秘密位于FLAGS命令上;)

票数 6
EN

Stack Overflow用户

发布于 2019-10-10 23:24:54

您可以使用imap_tools包:https://pypi.org/project/imap-tools/

代码语言:javascript
运行
复制
from imap_tools import MailBox, MailMessageFlags, A

with MailBox('imap.mail.com').login('test@mail.com', 'pwd', 'INBOX') as mailbox:

    # FLAG unseen messages in current folder as Answered and Flagged, *in bulk.
    flags = (MailMessageFlags.ANSWERED, MailMessageFlags.FLAGGED)
    mailbox.flag(mailbox.fetch(A(seen=False)), flags, True)

    # SEEN: mark all messages sent at 05.03.2007 in current folder as unseen, *in bulk
    mailbox.flag(mailbox.fetch("SENTON 05-Mar-2007"), MailMessageFlags.SEEN, False)

我是lib的作者。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17367611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档