【问题标题】:Gmail IMAP is sometimes returning bad results for fetchGmail IMAP 有时会返回错误的获取结果
【发布时间】:2014-10-08 17:03:40
【问题描述】:

我正在使用 python 通过 IMAP 连接到 gmail。

当我对一堆 uid 进行 fetch 时,结果有时会包含一些附加到末尾的奇怪的。

此错误出现间歇性,并在上周左右的某个时间开始出现。

例如,我执行如下获取:

>>>import imaplib
>>>conn = imaplib.IMAP4_SSL('imap.gmail.com')
>>># authenticate etc
>>>conn.uid('fetch', '12,13', '(X-GM-THRID)')

我有时会得到如下结果:

>>>['1 (X-GM-THRID 123123123123 UID 12)', 
    '2 (X-GM-THRID 123123123123 UID 13)', 
    '365022 (UID 601722 FLAGS (\\Seen))']

(为了便于阅读,添加了换行符,id 与原来的不同,通常我获取的内容远不止两个。)

这很奇怪。我根本没有要求任何关于额外信息的事情。有时它在那里,有时不在那里。无论我获取什么字段,额外的结果(我只见过一两个)从不包含它们,只包含 FLAGS 信息。

任何想法为什么会发生这种情况?

【问题讨论】:

  • conn的类型是什么?
  • imaplib.IMAP4_SSL - 我已编辑问题以反映这一点。

标签: python gmail imap gmail-imap


【解决方案1】:

本周早些时候在 IMAP 协议邮件列表中发布了以下内容:

“从昨天 [10 月 7 日星期一] 开始,Gmail 现在支持在我们报告新邮件/已删除邮件的任何地方报告标志更改(即协议允许的大多数地方,但绝对是在 IDLE 期间)。它仅适用于 gmail。 com 用户,如果我们没有发现任何问题,Google Apps 用户将在一周左右后关注。”

但是,新功能显然存在问题,因为今天他们说它正在回滚:

“我们看到了一些关于计划没有额外 FETCH 响应的报告,我们在周一推出了这些报告。我们很快就会回滚,因为一个非常受欢迎的客户端的旧版本存在问题(尽管据我们所知这部分东西)。”

-瑞克

【讨论】:

    【解决方案2】:

    Gmail 主动向您发送FLAGS 更新(因为有人远程更改了邮件)。这些不是为了响应您的请求,但 IMAP 允许服务器随时向您发送任何*信息。许多服务器会将这些未经请求的响应保存为 IDLENOOP 响应,但显然 Gmail 不希望等待。

    但是,直到最近(显然?)Gmail 根本没有发送标记更新,只有删除。

    *:有一些关于何时可以发送响应以避免竞争条件的规则,但这不是其中之一。

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多