標準の 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-To
Message-ID
References
In-Reply-To
ヘッダーにいくつかの値が表示され、メッセージの本文を正常に取得できるため、コード自体に問題がないことはほぼ保証できます。まるで、私が見ることができるヘッダー情報を Google がフィルタリングしているようなものです。
このページとまったく同じ質問があることに気付くかもしれませんが、独自の質問を作成するように提案されたので、そのようにしました。
編集
返信先のメッセージを取得せずにサーバーからメッセージに返信する方法を誰かが教えてくれたらMessage-ID
、それも同様にすばらしいことです。
編集2
私Message-ID
は非常に大きな受信トレイにあるすべてのメッセージを一覧表示しましたが、私が見る限り、ID の約 40% が実際に表示されています。同じテストを再度実行すると、同じメッセージが保持されますMessage-ID
。を示すメッセージの中からパターンを探していますが、Message-ID
メッセージのタイプの中には非パターンの非常に強力な証拠があります。
実際には、すべてのメッセージには がありますMessage-ID
(IMAP クエリで ID が表示されないメッセージについてもこれを確認しました)、IMAP 関数は一部のメッセージの ID しか明らかにしません。