新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mvg.biglobe.ne.jp>
Subject: Re: Sendmailで不達の際に差出人にエラー返信させるには?
Date: 1998/11/06 21:44:28
Reference: mesh.program/00547

11月4日に、でんでんさんは書きました。

>題名のとおりなんですが、Perlでフォームの内容をメール送信する
>CGIで、宛先と差出人を違うアドレスにしたとき、宛先がアドレス間違い
>などで届かなかった場合、そのままFromにはエラーが返って来ない
>ので、メールクライアントから送信した場合みたくエラーがFromに送信
>されるようにしたいのです。
>
メール配送においてヘッダに書かれた宛先とか差出人とかと情報はあまり
大きな意味を持ちません。配送時に重要なのは「エンベロープ」と呼ばれる
MTA(メール配送を行なっているプログラム)に渡される実際の配送元/先の
アドレスです。エラーが起こった時には、このエンベロープに書かれた
配送元アドレスに戻ってくるので、此処に正しいアドレスを設定しなくては
なりません。

そのCGIの内容が分からないと詳細は分かりませんが、例えば sendmail を
メールの送信に利用している場合、エンベロープの送信元アドレスは、
sendmail を起動したユーザになります。ですから、サーヴァが全て同じ
wwwの様なユーザ権限で動いている場合、エラーメールがwww宛に戻って
来ることになります。

これだとチョット不便なので、sendmailに -f オプションを付ける事で
エンベロープの差出人アドレスを変えることが出来ます。

つまり、

sendmail -fUSER

として、起動すると、サーヴァ権限で動いている sendmail でも、エンベロープの
差出人を USER に出来ます。ただし、sendmail ヴァージョンが R5 などでは
sendmail.cf で -f を利用できるユーザを設定しなくてはなりません。
現在普通に使われているような sendmail 8.7 以降のヴァージョンでは
sendmail.cf に記載が無くとも -f が使えますが、その代わり、

X-Authentication-Warning:

ヘッダでアドレスを差し替えていることが記載されます。

その他にも、昔は Errors-To: と言うヘッダがエラーが起きた時の戻りアドレスとして
使われていたことがありましたが、RFC822 と言うメール基本を定めている文書に
記載が無いため、現在は廃れつつあります。特に最近の sendmail.cf の設定では
省略時の設定が Errors-To: を解釈しないモードになっていることが多いので、
実質的に無意味になりつつあります。

# ちなみに、ヘッダ情報からエンベロープの宛先を決定するオプションは
# sendmail -t です。

詳しくは、sendmail のマニュアルや CF 付属の文書などを参照すると良いでしょう。