我正在使用OAuth2身份验证和Zend_Mail_Protocol_Imap
通过IMAP访问GMail。
一切都很好。
我需要做的是以线程形式呈现电子邮件,就像GMail界面一样。谷歌使这一点非常简单,因为它们有一个X-GM-THRID
标题,用于将对话与64位无符号整数相关联。
我的问题是:当出现一封电子邮件时,如何找出它所属的X-GM-THRID
?
Google首先说有一个活跃的服务器扩展程序X-GM-EXT-1
。您可以使用CAPABILITY
命令检查它是否存在(我有)。
所有信息都表明,如果这是有效的,那么X-GM-THRID
将只是作为标题返回,但事实并非如此。
也许我需要让Google通过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)
,完全如google示例中所述。在这种情况下,不会返回任何标头。
我并不是非常熟悉IMAP
命令,我不确定Zend_Mail_Protocol_Imap
是否正在抽象某些处理,这意味着正在删除此标题。
但我知道这让我很生气。
我错过了什么吗?这不是标题吗?
答案 0 :(得分:3)
好的,所以看起来它不是标题。它是IMAP命令和响应中的一个属性。
Zend_Mail_Protocol_Imap发送的标准fetch命令是“TAG5 FETCH 3673(FLAGS RFC822.HEADER)”
处理响应的代码只能处理'FLAGS'和'RFC822.HEADER'。它将此信息传递给Zend_Mail_Message对象,该对象扩展了Zend_Mail_Part。
Zend_Mail_Part解析有关标志的信息。它还解析标题。
我添加的额外“X-GM-THRID”属性实际上得到了响应。但由于它没有传回Zend_Mail_Message,我无法使用它。它在以太中丢失(确切地说,在Zend Library中Zend_Mail_Storage_Imap的第171行附近)。
所以我已经破解了核心...... Zend_Mail_Storage_Imap :: getMessage现在需要$ data ['X-GM-THRID']并将其传递给构造函数Zend_Mail_Part。我现在有一个方法Zend_Mail_Part :: getXGmThrid,它解决了我所有的问题。我显然会将它们重构到我自己的类中,在不太遥远的范围内扩展Zend_Mail_Storage_Imap和Zend_Mail_Part ......但是现在我知道这很有效。