8

在这里和互联网上搜索,有很多关于如何将消息标记为已看到的示例,即使这对于 imap 来说是自动的。

但是我怎样才能将电子邮件标记为UNSEENUNREAD

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

我怎样才能做到这一点?

我也使用过mail.select(mail_label,readonly=True),但它没有帮助,因为我无法将消息标记为SEEN我也需要的消息。我也希望这可以与 Gmail 一起使用。

4

4 回答 4

11

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

tag UID STORE -FLAGS (\Seen)

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

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

connection.uid('STORE', '-FLAGS', '(\Seen)')
于 2013-06-28T15:22:39.880 回答
6

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

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

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

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

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

于 2014-01-31T11:55:07.637 回答
3

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

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)

我是库作者。

于 2019-10-10T15:24:53.540 回答
3
`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 ://www.rfc-editor.org/rfc/rfc2060.html#page-9

于 2021-04-29T14:24:36.633 回答