Gmail IMAP通过php ouath2 Zend_Mail_协议_IMAP-获得X-GM-THRID

Gmail IMAP通过php ouath2 Zend_Mail_协议_IMAP-获得X-GM-THRID,gmail,imap,zend-mail,Gmail,Imap,Zend Mail,我使用OAuth2身份验证和Zend\u Mail\u协议通过IMAP访问GMail 一切都很好 我需要做的是以线程的形式呈现电子邮件,就像GMail界面一样。谷歌让这变得非常简单,因为他们有一个X-GM-THRID头,它将对话链接到一个64位无符号整数 我的问题是:当我收到一封电子邮件时,我如何知道它属于什么 首先,谷歌说有一个服务器扩展X-GM-EXT-1处于活动状态。您可以使用CAPABILITY命令检查它是否在那里(我有) 所有信息都表明,如果这是活动的,X-GM-THRID将作为标题返

我使用OAuth2身份验证和Zend\u Mail\u协议通过IMAP访问GMail

一切都很好

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

我的问题是:当我收到一封电子邮件时,我如何知道它属于什么

首先,谷歌说有一个服务器扩展
X-GM-EXT-1
处于活动状态。您可以使用
CAPABILITY
命令检查它是否在那里(我有)

所有信息都表明,如果这是活动的,
X-GM-THRID
将作为标题返回,但它不是

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

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

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

我对
IMAP
命令不太熟悉,也不确定
Zend\u Mail\u Protocol\u IMAP
是否正在抽象一些处理,这意味着此标头正在被删除

但我知道这让我发疯


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

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

Zend\u Mail\u协议\u Imap发送的标准fetch命令是“TAG5 fetch 3673(标志RFC822.HEADER)”

处理响应的代码只希望处理“FLAGS”和“RFC822.HEADER”。它将此信息传递给Zend_Mail_消息对象,该对象扩展了Zend_Mail_部分

Zend_邮件部分解析有关标志的信息。它还解析报头

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

所以我已经破解了核心。。。Zend_Mail_Storage_Imap::getMessage现在需要$data['X-GM-THRID'],并将其传递给构造函数Zend_Mail_部分。现在我有了一个Zend_Mail_Part::getXGmThrid方法,它解决了我所有的问题。显然,我会将它们重构到我自己的类中,扩展Zend_Mail_Storage_Imap和Zend_Mail_部分,在不太遥远的。。。但现在我知道这是可行的