python imaplib - 将电子邮件标记为未读或未读

时间:2013-06-28 14:52:44

标签: python imap

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

但如何将电子邮件标记为UNSEENUNREAD

我在python中有一个接收UNSEEN消息的脚本,它运行良好。但是在阅读它们之后,imap会自动将它们标记为SEEN,但只有在脚本没有错误时才能正常工作,因为如果它引发异常,我希望将电子邮件再次标记为UNSEEN,这样下次脚本将再次读取该消息。

我怎样才能实现这个目标?

我也使用了mail.select(mail_label,readonly=True),但它无济于事,因为我无法将消息标记为SEEN我也需要。我也希望这可以与Gmail一起使用。

4 个答案:

答案 0 :(得分:9)

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

tag UID STORE -FLAGS (\Seen)

但如果您在成功处理邮件后首先仅设置\Seen标志,那么您的软件可能会更加强大。这样,如果在处理消息时出现任何问题(即使与IMAP服务器的连接中断),该标志仍​​然未设置,您可以在下次运行脚本时重试该消息。您可以通过使用\Seen而不是BODY.PEEK来避免IMAP服务器自动设置BODY标记来执行此操作。

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

connection.uid('STORE', '-FLAGS', '(\Seen)')

答案 1 :(得分:5)

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

(typ, [data]) = <instance>.store(message_set, command, flags)

因此,以下行将允许您根据需要将消息设置为READ('+ FLAGS')或UNREAD('-FLAGS')。

connection.uid('STORE', MESSAGE_ID, '+FLAGS', '\SEEN')

如您所见,秘密在FLAGS命令上;)

答案 2 :(得分:0)

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

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

    # FLAG unseen messages in current folder as Answered and Flagged, *in bulk.
    flags = (imap_tools.StandardMessageFlags.ANSWERED, imap_tools.StandardMessageFlags.FLAGGED)
    mailbox.flag(mailbox.fetch('(UNSEEN)'), flags, True)

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

答案 3 :(得分:0)

`imap = imaplib.IMAP4_SSL(server)
 imap.login(username, password)
 imap.select("inbox", readonly=False)`

如果 readonly="True" 你不能改变任何标志。 但是,如果它是假的,你可以做如下,

imap.store(id, '-FLAGS', '\Seen')

然后电子邮件将标记为未读

(-) 表示 REMOVE 标志,(+) 表示 ADD 标志。

例如:您也可以设置 imap.store(id, '+FLAGS', '\Deleted') 来删除电子邮件。
像这样你可以设置,下面的任何标志

    \Seen       Message has been read

    \Answered   Message has been answered

    \Flagged    Message is "flagged" for urgent/special attention

    \Deleted    Message is "deleted" for removal by later EXPUNGE

    \Draft      Message has not completed composition (marked as a
                draft).

更多详情:https://tools.ietf.org/html/rfc2060.html#page-9