菊池高志

PHPでメールを送信する時にReturn-Pathヘッダーを設定する方法(envelope-fromを設定する方法)

2009-02-08 01:44:09

調べてたら混乱してきたのでまとめ。

1. mail()を使う場合

五番目の引数にsendmailのオプション"-f"を渡す。

mail($to, $subject, $body, $additionalheaders, "-f" . $returnpath);

2. PEAR::Mail (mailドライバー)

インスタンス生成時二番目の引数にsendmailのオプション"-f"を渡す。

$mail = Mail::factory("mail", "-f" . $returnpath);

3. PEAR::Mail (sendmailドライバー)

send()の二番目の引数にヘッダーを設定した配列を渡す。

$mail = Mail::factory("sendmail");
$headers = array(
  "To" => $to,
  "Return-Path" => $returnpath,
  "From" => $from,
  "Subject => $subject
);
$mail->send($to, $header, $body);

4. PEAR::Mail (smtpドライバー)

sendmailドライバーと同じ

添付ファイルなどを考えるとPEAR::Mailにしておきたいし、3と4の方が実装がシンプルにできそうでイイ。

メール自体を表すオブジェクトを作って、そのプロパティにボコボコ値を詰め込んでsendってメソッドで送信できる方が美しい気もするけど。

なんかちょっと違う方向性になりかかって来ちゃったけど、これ、気をつけないとおかしなメールを送ってしまうので要注意ですよ。っていうのも、なにも考えずにWebサーバーからメールを送るとReturn-PathがモロにWebサーバーのホスト名になるので、それがDNS引けなかったりするとスパム扱いされてしまったり、エラーメールが受け取れなかったり。。

 

 

【2009/02/09追記】
はてブにコメント頂いたように「envelope-fromを設定する方法」なので、タイトルを直しました。

 

※このエントリは ブロガーにより投稿されたものです。朝日インタラクティブ および ZDNet Japan編集部の見解・意向を示すものではありません。
  • 1件のコメント
#1   2009-02-10 13:21:15
sendmail の場合の X-Authentication-Warning: についても解説してあげると良いですね。

しかし、RFC5321 には次のように書いてあるので Return-Path ヘッダで判定する仕様はやな感じですね。

When the delivery SMTP server makes the "final delivery" of a
message, it inserts a return-path line at the beginning of the mail
data. This use of return-path is required; mail systems MUST support
it. The return-path line preserves the information in the from the MAIL command. Here, final delivery means the message
has left the SMTP environment. Normally, this would mean it had been
delivered to the destination user or an associated mail drop, but in
some cases it may be further processed and transmitted by another
mail system.

(中略)

A message-originating SMTP system SHOULD NOT send a message that
already contains a Return-path header field. SMTP servers performing
a relay function MUST NOT inspect the message data, and especially
not to the extent needed to determine if Return-path header fields
are present. SMTP servers making final delivery MAY remove Return-
path header fields before adding their own.
  • 新着記事
  • 特集
  • ブログ