使用 imaplib 获取电子邮件,但不要将其标记为 SEEN
Posted
技术标签:
【中文标题】使用 imaplib 获取电子邮件,但不要将其标记为 SEEN【英文标题】:Fetch an email with imaplib but do not mark it as SEEN 【发布时间】:2011-03-18 01:00:54 【问题描述】:我想解析来自用户收件箱的一些电子邮件,但是当我这样做时:
typ, msg_data = imap_conn.fetch(uid, '(RFC822)')
它将电子邮件标记为已读或已读。这不是所需的功能。你知道我怎样才能让电子邮件保持以前的凝视状态,要么看到要么没看到?
【问题讨论】:
【参考方案1】:您还可以在选择文件夹时将 read_only
设置为 true:
imap_conn.select('Inbox', readonly=True)
【讨论】:
如果您出于其他原因想要修改文件夹(例如,删除您偷看的一些邮件,因为它们是垃圾邮件,或其他原因),这不合适。 您可以在修改文件夹之前调用imap_conn.select('Inbox')
,然后再次调用imap_conn.select('Inbox', readonly=True)
。当然,使用 PEEK 更简单、更可靠。【参考方案2】:
以下应该有效:
typ, msg_data = imap_conn.fetch(uid, '(BODY.PEEK[HEADER])')
或BODY.PEEK[TEXT]
等
【讨论】:
只需BODY.PEEK[]
获取整个消息而不修改\Sent
。
BODY.PEEK[] 不适用于 gmail 的 IMAP 实现。【参考方案3】:
根据RFC 1730,您可以使用(RFC822.PEEK)
作为“消息部分”参数(我尚未验证哪些服务器实际上正确实现了该功能,但它们似乎并不难)。
【讨论】:
不幸的是,它不适用于 Gmail,但之前的答案可以。还是谢谢你! RFC1730 早已过时。 RFC3501 等价于BODY.PEEK[]
【参考方案4】:
你可以使用 imap_tools 包: https://pypi.org/project/imap-tools/
from imap_tools import MailBox, Q
# get list of email subjects from INBOX folder
with MailBox('imap.mail.com').login('test@mail.com', 'password') as mailbox:
# mark_seen=False - not mark emails as seen on fetch
subjects = [msg.subject for msg in mailbox.fetch(mark_seen=False)]
【讨论】:
以上是关于使用 imaplib 获取电子邮件,但不要将其标记为 SEEN的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中使用 imaplib 获取电子邮件正文?
Python 和 imaplib:无需下载完整电子邮件即可获取附件名称或正文