访问收件箱时出现未知IMAP4命令:'idle

0 投票
1 回答
52 浏览
提问于 2025-04-14 17:43

我正在尝试实时检查新邮件。我觉得下面的代码应该可以正常工作,但我遇到了一个错误:“AttributeError: Unknown IMAP4 command: 'idle'”。有没有人能帮我看看问题出在哪里?

import imaplib
import email

username = "test@xxxxx.com"
password = "xxxxx"

# Connect to the IMAP server
mail = imaplib.IMAP4_SSL('mail.xxxxx.com')

# Login to the server
mail.login(username, password)

# Select the INBOX folder
mail.select("INBOX")

# Start listening for new emails
mail.idle()

1 个回答

1

更新的回答:

imaplib 不支持 IDLE 命令。关于这个问题的 GitHub 讨论(从2011年开始的!)仍然在进行中 --> https://github.com/python/cpython/issues/55454

这里有几种解决方案,所以我就不再重复已有的内容了(这个说法有点玩笑的意思)。


旧的回答

我猜测你的邮箱服务器可能不支持 IDLE 命令。

这里简单回顾一下 IDLE 命令,注意这只是一个可选功能。

你可以使用下面的代码来检查这个(登录服务器并不是检查功能所必需的):

import imaplib

mail = imaplib.IMAP4_SSL('mail.xxxxx.com')
print(mail.capabilities)

这段代码会输出一个 tuple[str],看起来应该是这样的:

('IMAP4REV1', 'UNSELECT', 'IDLE', 'NAMESPACE', 'QUOTA', 'ID', 'XLIST', 'CHILDREN', 'X-GM-EXT-1', 'XYZZY', 'SASL-IR', 'AUTH=XOAUTH2', 'AUTH=PLAIN', 'AUTH=PLAIN-CLIENTTOKEN', 'AUTH=OAUTHBEARER')

注意我从 GMail 收到的响应中包含了 IDLE 的能力...

撰写回答