通常、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です。
$mail = Mail::factory('smtp', $params);//第一引数であるバックエンドはmailでもなくsendmailでもなく、smtpです
smtp バックエンドの起動パラメータに「'debug' => TRUE」を追加すると、実際の SMTP の会話内容が echo 出力されるようです。おかしくなるときと正常に動作するときとでどのような違いがあるのか、実際のやりとりを確認してみてはいかがでしょうか?
詳細はマニュアルを……、と思ったら、マニュアルにはこのパラメータは記載されていないようですね。残念。
Mail/smtp.php のコード中のコメントを見てみると、マニュアルに記載されていないパラメータがまだいくつかあるようです ('localhost', 'timeout', 'verp' など)。
ドライバーsmtpを使用した場合,PEAR::MailはフィールドFromをEnvelop Fromにします.
つまり,
From: foo@example.com
というヘッダーを用意してあげればそこに戻ってきます.
余談ですが,これに関連する処理は若干内部で特殊なことをやっているので,Fromに日本語のコメントなどを入れるのは避けておく方がいいかもしれません.
なるほど、Fromフィールドを利用しているのですね。ただ、リターンメールにより自動的にエラーメール処理プログラムを起動させようと考えていて、Fromフィールドとリターン処理アドレスを別にしたいのです。
仕様なので、PEARをいじるしかないですね。
ありがとうございます。わざわざ、モジュールのコードをご確認いただきまして。
私もコードをチェックしてみなければいけませんね。それから、もうすこしSMTPのことも勉強しなければと思いました。