1

OAuth2 認証を使用して IMAP 経由で GMail にアクセスしていますZend_Mail_Protocol_Imap

それはすべてうまくいきます。

私がしなければならないことは、GMail インターフェイスと同じようにメールをスレッド形式で表示することです。X-GM-THRID会話を 64 ビットの符号なし整数にリンクするヘッダーがあるため、Google はこれを非常に簡単にします。

X-GM-THRID私の問題は、1 通のメールが表示された場合、それが何に属しているかをどのように確認するかということです。

まずGoogleは、アクティブなサーバー拡張機能があると言っていますX-GM-EXT-1。コマンドを使用してそこにあることを確認できますCAPABILITY(そして私は持っています)。

すべての情報は、これがアクティブな場合、X-GM-THRID単にヘッダーとして返されることを示唆していますが、そうではありません。

おそらく、fetch コマンドを介して Google に返すように依頼する必要があります。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。このヘッダーが削除されていることを意味する処理を抽象化しているかどうかはわかりません。

しかし、私はこれが私を怒らせていることを知っています.

何か不足していますか?ヘッダーじゃないの?

4

1 に答える 1

3

さて、ヘッダーではないようです。これは、IMAP コマンドと応答の属性です。

Zend_Mail_Protocol_Imap が送信する標準のフェッチ コマンドは、「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 行目あたり)。

コアをハッキングしました... Zend_Mail_Storage_Imap::getMessage は $data['X-GM-THRID'] を想定し、それをコンストラクタ Zend_Mail_Part に渡します。そして、すべての問題を解決するメソッド Zend_Mail_Part::getXGmThrid ができました。もちろん、Zend_Mail_Storage_Imap と Zend_Mail_Part を拡張する独自のクラスにそれらをリファクタリングしますが、今のところ、これが機能することはわかっています。

于 2013-02-01T16:48:56.747 に答える