【问题标题】:How to get unseen emails using python imap-tools如何使用 python imap-tools 获取看不见的电子邮件
【发布时间】:2021-08-06 13:58:06
【问题描述】:
from imap_tools import MailBox, AND
import re

yahooSmtpServer = "imap.mail.yahoo.com"

client = MailBox(yahooSmtpServer).login('myEmail', 'myPassword', 'INBOX')
for msg in client.fetch(AND(seen=False)):
    mail = msg.html
    print(mail)
            

我不希望在我的收件箱中出现看不见的邮件时立即收到它们。循环浏览这段代码,我总是可以检查看不见的消息,但这真的很麻烦,我不知道如何将消息标记为已读。

那么有什么方法可以使用 IMAP 工具在我的 yahoo 邮件收件箱中获取看不见的消息?如果没有...我可以使用另一个库吗? 谢谢。

【问题讨论】:

    标签: python smtp imap imaplib imap-tools


    【解决方案1】:

    imap_tools BaseMailBox.fetch 有 mark_seen 参数。

    默认情况下为 True,因此,电子邮件在获取时默认标记为“已看到”。

    但你可以手动完成:

    from imap_tools import MailBox, MailMessageFlags
    with MailBox('imap.mail.com').login('test@mail.com', 'pwd') as mailbox:
        uids = [msg.uid for msg in mailbox.fetch(mark_seen=False)]
        mailbox.flag(uids, MailMessageFlags.SEEN, True)
    

    *IMAP 也有一个新的搜索条件

    【讨论】:

    • 但由于某种原因,默认情况下并没有发生这种情况......但是,这种方法有效。谢谢。
    【解决方案2】:

    来自 imaptools documentation 和这个例子:

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

    看来这段代码应该可以工作:

    client = MailBox(yahooSmtpServer).login('myEmail', 'myPassword', 'INBOX')
    for msg in client.fetch(AND(seen=False)):
        mail = msg.html
        print(mail)
    # pass the email uid and bool here
        client.flag(msg.uid, MailMessageFlags.SEEN, True)
    

    【讨论】:

    • 它可以工作,但我们必须传递 msg.uid 而不是 msg。 client.seen(msg.uid, True) 现在可以了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2014-08-06
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多