当前位置: 首页 > 知识库问答 >
问题:

Gmail IMAP via php ouath2 Zend_Mail_Protocol_Imap - 获取 X-GM-THRID

壤驷高洁
2023-03-14

我使用 OAuth2 身份验证通过 IMAP 访问 GMail,Zend_Mail_Protocol_Imap

一切都很好。

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

我的问题是:当看到一封电子邮件时,我如何知道它属于哪个X-GM-THRID

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

所有信息都表明,如果这是活动的,则<code>X-GM-THRID</code>将简单地作为标头返回,但它不是。

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

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

我的代码正在发送TAG5 FETCH 3673(FLAGSRFC822.HEADERX-GM-THRID),但标头不包括X-GM-THRID的条目。

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

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

但我知道这快把我逼疯了。

我错过了什么吗?不就是一个表头吗?

共有1个答案

咸高谊
2023-03-14

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

Zend_Mail_Protocol_Imap发送的标准抓取命令是“TAG5 FETCH 3673 (FLAGS RFC822.页眉)”

处理响应的代码只期望处理“FLAGS”和“RFC822”。页眉'。它将此信息传递给扩展Zend_Mail_Part的Zend_Mail_Message对象。

Zend_Mail_Part解析有关标志的信息。它还解析报头。

我添加的额外的“X-GM-THRID”属性实际上会得到响应。但是,由于它没有传递回Zend_Mail_Message,因此我无法使用它。它在以太中丢失(确切地说,在我的Zend库中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,在《不太遥远》中……但现在我知道这是可行的。

 类似资料:
  • gm 是 Node.js 的 GraphicsMagick 和 ImageMagick。 常规使用: var fs = require('fs')  , gm = require('./gm');// resize and remove EXIF profile datagm('/path/to/my/img.jpg').resize(240, 240).noProfile().write('/p

  • 有人在试图从popover显示UIActionSheet时收到此消息吗? 您的应用程序提供了UIAlertController()风格的UIAlertControlllerStyleActionSheet。具有此样式的UIAlertController的modalPresentationStyle是UIModalPresentationPopover。您必须通过警报控制器的popoverPrese

  • 我有一个非常简单的垂直线: 我总是得到400分的结果——糟糕的要求。知道我做错了什么吗?。。

  • 我开始学习Netty 4 Http服务器,但我已经遇到了一个问题。如何以最简单的方式从POST请求中获取内容? 我在浏览Netty的文档,但很复杂。 提前道谢! 编辑:我正在使用这个代码接收数据。 正如您所看到的,有三条注释行返回给我一个异常:

  • 问题内容: 在0.9.x版本中,我们可以通过ID获得套接字,如下所示: 但是在1.0.x中我们不能。如何在1.0.x中按ID查找套接字? 问题答案: 对于socket.io 1.0,请使用: 对于0.9,其io.sockets.sockets [socketId]而不是io.sockets.socket [socketId]

  • 问题内容: 我必须为仍在运行JDK 1.5的旧版应用程序编写一些代码。不幸的是,看起来OS X实际上没有安装1.5 JDK。它只是链接到1.6: 从http://developer.apple.com/java/faq/听起来,Java是OS更新的一部分…我在Mac OS X v10.6.3 (Snow Leopard)上。有没有办法在此OS版本上安装实际的1.5 JDK? 还是我需要尝试找到旧版