通过 IMAP 从 Yahoo 获取邮件时 macOS Mail 出现延迟 – 与“NO [LIMIT] CAPABILITY Rate limit hit”消息有关?

通过 IMAP 从 Yahoo 获取邮件时 macOS Mail 出现延迟 – 与“NO [LIMIT] CAPABILITY Rate limit hit”消息有关?

我一直使用 Apple 的标准 Mail.app 客户端(适用于 OS X 和 macOS),因为在我看来,它是目前最好的邮件客户端。然而,几年来,它通过 IMAP 从 Yahoo! 邮件中获取邮件的速度非常慢,这让我很恼火。新邮件最终会出现在收件箱中,但有时实际收到后要三四天才会出现。

同时,登录 mail.yahoo.com 可以正常工作,并且通过默认邮件应用程序在我的 iPhone 或 iPad(在同一网络上)上获取电子邮件也可以正常工作:电子邮件在发送/接收后几分钟内就会显示在收件箱中。

仔细研究后发现,Mail.app 似乎经常收到NO [LIMIT] CAPABILITY Rate limit hit来自 Yahoo! 服务器的消息,我无法弄清楚该消息的具体含义,或者它是否与延迟有关。

为了完整起见,这里是最近尝试获取新消息的完整(已删除)对话:

INITIATING CONNECTION Aug 17 00:19:52.885 host:imap.mail.yahoo.com -- port:993 -- socket:0x0 -- thread:0x600003cc1e80

CONNECTED Aug 17 00:19:53.263 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80

READ Aug 17 00:19:53.263 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
* OK [CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN AUTH=XOAUTH2 AUTH=OAUTHBEARER ID MOVE NAMESPACE XYMHIGHESTMODSEQ UIDPLUS LITERAL+ CHILDREN X-MSG-EXT OBJECTID] IMAP4rev1 Hello

WROTE Aug 17 00:19:53.263 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
1.146 ID ("name" "Mac OS X Mail" "version" "13.4 (3608.120.23.2.7)" "os" "Mac OS X" "os-version" "10.15.7 (19H1217)" "vendor" "Apple Inc.")

READ Aug 17 00:19:53.328 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
* ID ("remote-host" "[my IP address]" "vendor" "Yahoo! Inc." "support-url" "http://help.yahoo.com/" "name" "Y!IMAP" "host" "[subdomain].imap.mail.yahoo.com" "version" "1.1.18742")
1.146 OK ID completed

WROTE Aug 17 00:19:53.329 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
2.146 AUTHENTICATE OAUTHBEARER [long OAuthBearer payload here]

READ Aug 17 00:19:54.136 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
2.146 OK AUTHENTICATE completed

WROTE Aug 17 00:19:54.136 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
3.146 CAPABILITY

READ Aug 17 00:19:58.685 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600004d5d920 -- thread:0x600003cc1e80
* BYE IMAP4rev1 Server logging out
3.146 NO [LIMIT] CAPABILITY Rate limit hit.

(146 这个数字有所不同。)

对我来说,这看起来像是身份验证顺利进行,然后邮件询问 Yahoo!服务器它提供哪些功能(即使服务器实际上之前就在连接建立后发送了该信息) - 然后 Yahoo!邮件关闭连接并显示BYE此消息,表示没有任何[LIMIT]功能(谁要求的?),并且显然达到了某些速率限制。

SMTP 连接不会发生这种情况——它们运行顺畅,发出的邮件可以顺利到达目的地,没有延迟。我见过关于 mail.yahoo.com 无法访问的投诉,显示“速率受限”消息,但对我来说情况并非如此:通过网站登录可以正常工作。

当然,有时通过邮件似乎也能正常工作;下一次尝试给了我这个(只是结局):

READ Aug 17 00:45:54.196 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600000391c80 -- thread:0x6000035a3900
* CAPABILITY IMAP4rev1 ID MOVE NAMESPACE XYMHIGHESTMODSEQ UIDPLUS LITERAL+ CHILDREN X-MSG-EXT UNSELECT OBJECTID
3.281 OK CAPABILITY completed

WROTE Aug 17 00:45:54.197 [kCFStreamSocketSecurityLevelTLSv1_2] -- host:imap.mail.yahoo.com -- port:993 -- socket:0x600000391c80 -- thread:0x6000035a3900
4.281 LOGOUT

显然没有速率限制,功能仅按要求列出。但仍然没有获取新消息,尽管收件箱中有几封消息尚未获取。

从之前的日志来看,Mail 似乎应该询问很多后续问题,例如SELECT INBOXSTATUS [subfolder names]然后得到一些答案,包括未获取邮件的数量等 - 但事实并非如此。即使没有速率限制,Mail 在收到远程服务器功能后的反应也是……注销。

这是正常的、预期的 IMAP 行为吗?如果不是,这里面有什么线索可以找出发生了什么以及为什么发生?有没有什么方法可以解决这个问题?

相关内容