mail関数とエラーメール

2008/06/03 | PHPの基本

PHPからはmail関数やmb_send_mail関数を使えば、簡単にメールを送信することができる。しかし、そもそもこれらの関数だけで、RFCに沿った日本語メールを送信することはできない(らしい)。「RFCに厳密に沿って」作るのが一番いいのは間違いないが面倒なので、mb_send_mail関数を使う際のオプション類についてメモしておく。
mb_send_mail関数は標準で引数3つ、オプションであと2つの引数、合計5つの引数をとることができる。標準の3つの引数はメール送信時には必須の「宛先メールアドレス」「タイトル」「本文」。残りの2つのオプションが重要だ。

第4引数:メールの追加ヘッダ
ここで指定した文字列をメールのヘッダとして追加してくれる。標準の3つの引数だけでメールを送信すると、到着メールの送信者欄が「apache@example.net」みたいになってしまうので、以下のように設定すればよい(行末は改行で複数行のヘッダを指定できる)。
“From: hoge@example.net¥r¥n”

第5引数:MTAへのオプション指定
上記で送信者メールアドレスを指定することはできる。しかし宛先メールアドレスが間違っているなどの場合には、残念ながら上記で設定したFromメールアドレスにエラーメールは返ってこない。エラーメールはFromヘッダには返されないことがほとんどなのだ。ではどういったヘッダを加えるかということになるが、メールソフトなどで受信したメールのヘッダを覗いてみるといい。Return-Pathというヘッダがあるはずだ。実はこのヘッダのメールアドレス宛にエラーメールが返されている(ようだ)。では「Return-Pathを第4引数に」と思うのだが、実は早計で、Return-Pathは特別なヘッダなのだ。
では、どうするか。それを解決するのが第5引数だ。第5引数に以下のように与えればよい。
“-f hoge@example.net”
第5引数はMTA(メールサーバソフト)に、メール送信時のオプション指定をするためのもので、そこで指定するのが正しい。これでエラーメールが届く(確率が上がる)。

実はエラーメールの配送は、自分のサーバや相手先サーバの使用に依存することが多いので上記の設定でもエラーを拾うことができない場合が多々あると思われる。そんな場合は・・・都度原因を追うしかないだろうな。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net