人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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です。

●質問者: kyoko55
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:BODY Factory hoge MTA Pear
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

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

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

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

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

◎質問者からの返答

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

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


2 ● えるふん
●35ポイント

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

つまり,

From: foo@example.com

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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ