1

我正在使用 OAuth2 身份验证通过 IMAP 访问 GMail,并且Zend_Mail_Protocol_Imap.

这一切都很好。

我需要做的是以线程形式呈现电子邮件,就像 GMail 界面一样。谷歌让这变得非常容易,因为他们有一个X-GM-THRID标题,它将对话与一个 64 位无符号整数链接起来。

我的问题是:当出现一封电子邮件时,我如何找出X-GM-THRID它属于什么?

首先谷歌说有一个服务器扩展X-GM-EXT-1是活跃的。您可以使用命令检查它是否存在CAPABILITY(我有)。

所有信息都表明,如果这是活动的,那么X-GM-THRID将简单地作为标题返回,但事实并非如此。

也许我需要让谷歌通过 fetch 命令返回它。Google 确实在这里描述了一个简单的获取过程:

https://developers.google.com/google-apps/gmail/imap_extensions

我的代码正在发送TAG5 FETCH 3673 (FLAGS RFC822.HEADER X-GM-THRID),但标题不包含X-GM-THRID.

我什至将其简化为TAG6 FETCH 3673 (X-GM-THRID)与谷歌示例中描述的完全相同。在这种情况下,不返回任何标题。

我对命令不是很熟悉,IMAP我不确定是否Zend_Mail_Protocol_Imap抽象了一些处理,这意味着这个标头正在被删除。

但我知道这让我发疯。

我错过了什么吗?不是标题吗?

4

1 回答 1

3

好的,所以看起来它不是标题。它是 IMAP 命令和响应中的一个属性。

Zend_Mail_Protocol_Imap 发送的标准 fetch 命令是“TAG5 FETCH 3673 (FLAGS RFC822.HEADER)”

处理响应的代码只希望处理“FLAGS”和“RFC822.HEADER”。它将这个信息传递给扩展 Zend_Mail_Part 的 Zend_Mail_Message 对象。

Zend_Mail_Part 解析关于标志的信息。它还解析标题。

我添加的附加“X-GM-THRID”属性实际上确实得到了响应。但由于它没有传递回 Zend_Mail_Message,所以我无法使用它。它在以太中丢失了(准确地说,在我的 Zend 库中 Zend_Mail_Storage_Imap 的第 171 行左右)。

So I've hacked the core... Zend_Mail_Storage_Imap::getMessage now expects $data['X-GM-THRID'] and passes it to the constructor Zend_Mail_Part. And I now have a method Zend_Mail_Part::getXGmThrid which solves all my problems. I'll obviously refactor them into my own classes extending Zend_Mail_Storage_Imap and Zend_Mail_Part in the not too distant... but for now I know this works.

于 2013-02-01T16:48:56.747 回答