6

標準の IMAP 関数を使用して、PHP でメールを取得しています。スレッドを構築するには、各メッセージのMessage-ID(およびReferencesと) を追跡する必要があります。In-Reply-Toこのシステムが展開されたら、ユーザーがメール クライアントでメッセージに返信してメッセージをスレッドに追加できるようにしたいのですが、私の Web インターフェイスでは、元の投稿に返信を添付できません。In-Reply-To電子メール ヘッダーの ID 。ID を使用In-Reply-Toして、新しい投稿の通知に返信を添付しますが、ID を取得できないため、できません。ヘッダーがあればIn-Reply-To、メッセージを接続する ID のスレッドがあるため、メッセージをグループ化できます。

また、ユーザーがサーバーのメールアドレスに送信したメッセージに返信できるようにしたいのですが、送信にエラーが発生した場合などMessage-IDは、メッセージのが必要になります。In-Reply-To私が返信するメッセージのIDです。

の値を取得できません。また、実際に値を持っていてMessage-IDも取得できません。In-Reply-To(Gmail の任意のメッセージに移動し、返信ボタンの横にあるドロップダウン メニューをクリックし、[オリジナルを表示] をクリックすると、IMAP 関数を呼び出したときに欠落しているすべてのヘッダー情報が実際にそこにあることがわかります。ただし、Gmail はその情報を IMAP サーバーに提供したくありません)。

imap_headerinfoヘッダー情報 ( 、imap_fetchheader、 ) を取得すると思われるさまざまな呼び出しを試しましたimap_fetch_overviewが、それらはすべて、必要のないヘッダー情報のスパース値の配列を返します。実行後

$this->mbox = imap_open('{imap.gmail.com:993/imap/ssl}', $email, $password);

これらの呼び出しのいずれかで、ヘッダーからいくつかの有用な値しか取得できません。

imap_header($this->getImapStream(), "1");
imap_fetch_overview($this->getImapStream(), "1");
imap_fetchheader($this->getImapStream(), "1");

Subject、、、およびその他のヘッダー値のようなものを見ることができ、それらはすべて正確ですがTo、、、、およびその他の重要なヘッダー情報はほとんどありません (むしろ、それらを表す配列値は常に空です)。Reply-ToMessage-IDReferencesIn-Reply-To

ヘッダーにいくつかの値が表示され、メッセージの本文を正常に取得できるため、コード自体に問題がないことはほぼ保証できます。まるで、私が見ることができるヘッダー情報を Google がフィルタリングしているようなものです。

このページとまったく同じ質問があることに気付くかもしれませんが、独自の質問を作成するように提案されたので、そのようにしました。


編集

返信先のメッセージを取得せずにサーバーからメッセージに返信する方法を誰かが教えてくれたらMessage-ID、それも同様にすばらしいことです。


編集2

Message-IDは非常に大きな受信トレイにあるすべてのメッセージを一覧表示しましたが、私が見る限り、ID の約 40% が実際に表示されています。同じテストを再度実行すると、同じメッセージが保持されますMessage-ID。を示すメッセージの中からパターンを探していますが、Message-IDメッセージのタイプの中には非パターンの非常に強力な証拠があります。

実際には、すべてのメッセージには がありますMessage-ID(IMAP クエリで ID が表示されないメッセージについてもこれを確認しました)、IMAP 関数は一部のメッセージの ID しか明らかにしません。

4

2 に答える 2

13

ヘッダーが実際に欠落していたわけではないことがわかりました。私がprint_rこれらの電話をしていたとき:

imap_header($this->getImapStream(), "1");
imap_fetch_overview($this->getImapStream(), "1");
imap_fetchheader($this->getImapStream(), "1");

でエスケープ文字を生成するのを怠りました。これは、 s が少し似ているか、それに近いものに見えるhtmlspecialcharsため重要であり、ブラウザは「ねえ、それは奇妙なタグですが、1つのように扱います!」と考えました。Message-ID<lotsOfArbitraryNumbersAndLetters@domain.com>

于 2013-07-19T19:21:44.047 に答える
0

おそらく、メッセージのヘッダーを取得する関数は、要求時に「制限リスト」を送信しているか、IMAP プロトコル「ENVELOPE」を使用しているため、Received などの不要なヘッダーをフェッチする必要はありません。それらがフェッチされることを保証しますが、何らかの理由で PHP 関数がそれらをフェッチしていないのではないかと思います。GMail は、受け取った MIME メッセージをそのまま通過します。

ENVELOPE にスレッド情報は含まれていないと思います。

プロトコル トレースを実行できますか? もしそうなら、私はあなたが何が起こっているのかを診断するのを手伝うことができます.

于 2013-07-18T20:35:25.680 に答える