PHPのスクリプトからメールを送信し、送信したメールに対しての返信メールを

POPサーバーから受信して、どのメールに対しての返信かをスレッド構造で管理
したいと思っています。つまり普通のメーラーでやっていることをWeb上でPHPで
実現したいと思います。
送信したメールのIDのようなものはDBに保存しておいてPOPサーバーから受信した
メールのヘッダーを調べれば、どのメールへの返信かが分かるのでしょうか。
また送信したメールのIDのようなものをPHPで取得できるのかも知りたいです。
よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/12/11 12:42:54
  • 終了:2007/12/11 16:58:48

回答(2件)

id:tezcello No.1

tezcello回答回数457ベストアンサー獲得回数682007/12/11 13:18:07

ポイント35pt

メール送信時に message_id をサーバ(あるいはメーラ、今回はPHPスクリプト)で付けて送ります。

   message_id (RFCでは、Message-ID ?)は、mail(), mb_send_mail() に指示できるのでは?

   http://jp.php.net/manual/ja/function.mail.php

返信をすると、in_reply_to というのをメーラが付けて送ります。

なので、読出し時に in_reply_to をチェックすれば、どの message_id に対する返信かはわかる事になっています。

   http://www.php.net/manual/ja/ref.imap.php

   http://www.php.net/manual/ja/function.imap-headerinfo.php

ですが、メーラによって in_reply_to を付けてこないものがあるようで、完全ではないようです。

id:orihomot

ありがとうございました。大変参考になりました!!

2007/12/11 16:58:04
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/12/11 16:21:10

ポイント35pt

通常のメールソフトで送信したメールであれば、必ずメールヘッダに

Message-Id: <AABBCC@smtp.example.jp>

等のように Message-Id がついています。


同じく返信したメールには先のヘッダに加えて、

In-Reply-To: <AABBCC@smtp.example.jp>

というヘッダがついて、先のメールの返信であることがわかります。


通常のメールソフトもこのヘッダを見てスレッド化しているだけですので同じことをやればよいでしょう。

ただし、携帯のメールソフト等一部は In-Reply-To ヘッダをつけてくれないのでどうやってもスレッド化できない

場合もあります。

InReplyToプロパティ

id:orihomot

ありがとうございます。

参考にさせていただきます。

2007/12/11 16:58:23
  • id:b-wind
    Message-Id: はメールソフトがつけなくても最悪サーバーがつけてくれるから大して気にしなくていい。
    問題は In-Reply-To: 。
  • id:tezcello
    自分が送ったメールのIDを頼りに返信の有無をチェックするという手法では、
    サーバにつけてもらったIDは、自分宛にも送信しないと分らないのではと思います。
    (IMAPなら送信済みのフォルダから調べられるかも)
    なので、気にしておかないといけないのでは?
    qmail はヘッダの補完をしない(= message-id を MUA でつけないといけない)という情報もありましたし。...その後補完されるようになったのかどうかは知りません...

    In-Reply-To をつけないけど、References はつけるとかいうのもあるようです。
    両方をチェックしなければいけないかも知れません。
    (それでも完全ではないかも知れませんが)
  • id:b-wind
    > 自分が送ったメールのIDを頼りに返信の有無をチェックする
    これは想定していませんでしたね。この場合確かにその通り。

    > qmail はヘッダの補完をしない
    忘れてた…。これもおっしゃる通りです。
    ただ、例外があって SMTP でのやり取り中に補完することはありませんが、
    qmail-inject (ローカルからの送信用コマンド)を使用した場合にはこのコマンドが付けてくれます。
    > PHPのスクリプトからメールを送信し
    であれば、普通はこのコマンドを使用するはずなので保管してくれることを期待できます。

    どちらにせよ「気にしなくていい」というのは言いすぎでしたね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません