PHPのPEARモジュールのMailクラスでSMTPの利用について、バウンスメールの受け取りアドレスの指定がうまくいきません。

通常、sendmailなどmail()関数では、引数に-fオプション「-fhoge@example.xxx」でエンベロープsenderを指定し、
受信メールのReturn-Pathフィールドにhoge@example.xxxが付くと思います。しかし、

$mail = Mail::factory('smtp', $params);//第一引数であるバックエンドはmailでもなくsendmailでもなく、smtpです
$headers = array(
'Return-Path' => 'hoge@example.xxx',
);
$mail->send($recipients, $headers, $body);
(余計なコードは省略)
とし、ローカルなアドレスに送ると、受信メールのヘッダは

Return-Path: <hoge@example.xxx> ←問題なしだが
Delivered-To: ......
Received: .......
Return-Path: hoge@example.xxx ←変な場所にゴミ
Subject: ......

となります。なので、

$headers = array(
'Return-Path' => '<hoge@example.xxx>',//括弧をつけてみた
);
とすると、

Return-Path: <"<hoge"@example.xxx> ←おかしくなっている
Delivered-To: ......
Received: .......
Return-Path: <hoge@example.xxx> ←括弧つきのゴミ
Subject: ......

となります。
リモートのアドレスに送ると問題ないのですが、他の宛先でいつこの問題が起きるか不安です。
根本的に指定方法が間違っている気がします。MTAはqmailです。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/07/18 13:40:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:takagimasahiro No.1

回答回数23ベストアンサー獲得回数2

ポイント35pt
$mail = Mail::factory('smtp', $params);//第一引数であるバックエンドはmailでもなくsendmailでもなく、smtpです

smtp バックエンドの起動パラメータに「'debug' => TRUE」を追加すると、実際の SMTP の会話内容が echo 出力されるようです。おかしくなるときと正常に動作するときとでどのような違いがあるのか、実際のやりとりを確認してみてはいかがでしょうか?

詳細はマニュアルを……、と思ったら、マニュアルにはこのパラメータは記載されていないようですね。残念。

Mail/smtp.php のコード中のコメントを見てみると、マニュアルに記載されていないパラメータがまだいくつかあるようです ('localhost', 'timeout', 'verp' など)。

id:kyoko55

ありがとうございます。わざわざ、モジュールのコードをご確認いただきまして。

私もコードをチェックしてみなければいけませんね。それから、もうすこしSMTPのことも勉強しなければと思いました。

2006/07/14 11:21:24
id:elf No.2

回答回数76ベストアンサー獲得回数8

ポイント35pt

ドライバーsmtpを使用した場合,PEAR::MailはフィールドFromをEnvelop Fromにします.

つまり,

From: foo@example.com

というヘッダーを用意してあげればそこに戻ってきます.

余談ですが,これに関連する処理は若干内部で特殊なことをやっているので,Fromに日本語のコメントなどを入れるのは避けておく方がいいかもしれません.

id:kyoko55

なるほど、Fromフィールドを利用しているのですね。ただ、リターンメールにより自動的にエラーメール処理プログラムを起動させようと考えていて、Fromフィールドとリターン処理アドレスを別にしたいのです。

仕様なので、PEARをいじるしかないですね。

2006/07/16 19:20:09

コメントはまだありません

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

トラックバック

  • [PHP]PAER::MailでReturn-Pathを設定 yh19c108の日記 2007-07-10 19:54:38
    どうもヘッダーにReturn-Pathを設定しても反映されなかったのはバグだったみたい。 CVSの方は既にfixされているので、帰ってから試してみよう。 Request #10610 Return Path not settable - http://pear.php.net
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

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

回答リクエストを送信したユーザーはいません