【问题标题】:imap_tools Not Fetching New Emailsimap_tools 未获取新电子邮件
【发布时间】:2022-09-30 05:52:36
【问题描述】:

我正在尝试使用 imap_tools 来获取新电子邮件。出于某种原因,它似乎只获取我登录时已经在我的收件箱中的电子邮件。

谁能看到我做错了什么?

mailbox.login(email, password, initial_folder=\'INBOX\')
print(\"Logging in\")

for _ in range(50):
    try:
        msgs = mailbox.fetch(AND(new=True, subject=\'Order\')) 
        print(\"Fetching emails\")
        for msg in msgs:
            mail = msg.subject
            print(mail)
    except:
        pass

    sleep(1)

mailbox.logout()
print(\"Logging out\")
  • 你设法让它工作吗?
  • 不幸的是不是@Isumaru

标签: python imap-tools


【解决方案1】:

第一个错误 - 你没有读到“新”描述:新 - 设置了最近标志但没有看到标志

第二 - 取而代之的是每秒你可以使用 IDLE

from imap_tools import MailBox, A

# waiting for updates 60 sec, print unseen immediately if any update
with MailBox('imap.my.moon').login('acc', 'pwd', 'INBOX') as mailbox:
    responses = mailbox.idle.wait(timeout=60)
    if responses:
        for msg in mailbox.fetch(A(seen=False)):
            print(msg.date, msg.subject)
    else:
        print('no updates in 60 sec')

【讨论】:

  • 谢谢@弗拉基米尔。我不明白第一点。我想收到尚未看到的新电子邮件
  • @James,您想要:(新电子邮件并且没有看到),您必须自己确定什么对您来说是“新的”以及您将如何管理它。
  • @Vladimir我试过了,但是新邮件仍然没有显示,如果我将旧邮件标记为未从电子邮件客户端看到,它将显示在cli中,但如果我将新邮件发送到使用过的邮箱,则新邮件不会显示向上。
【解决方案2】:

我遇到了同样的问题,您只需要在获取功能之前刷新收件箱:

mailbox.login(email, password, initial_folder='INBOX')
print("Logging in")

for _ in range(50):
    try:
        mailbox.folder.set('INBOX')
        msgs = mailbox.fetch(AND(new=True, subject='Order')) 
        print("Fetching emails")
        for msg in msgs:
            mail = msg.subject
            print(mail)
    except:
        pass

    sleep(1)

mailbox.logout()
print("Logging out")

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2022-11-21
    • 2016-03-25
    • 2017-08-12
    • 2019-09-13
    • 2021-10-07
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多