|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
sendmailで送信したメールの宛先が存在しないメールアドレスだった場合、 通常はエラーメールが返ってきますね。ところが、今までに作成したメール送信関数では、 メールの宛先が存在しないメールアドレスの場合でも、 エラーメールが返ってこないようです! これでは、宛先が間違っていてもそれに気が付かないことになります。 修正しましょう。
メールの宛先が存在しないメールアドレスの場合、自動的に送られるエラーメール、 誰に宛てられて送られるんでしょうか? これは当然、送り主ですよね。送り主は、From: で指定するんでした。 ところが、これ、間違いです。エラーメールは、From: で指定した送信元メールアドレスに 送られるのではなく、sendmailを実行した、そのサーバーのアカウントの人に送られるみたいなんです。
通常、ウェブサーバーではsuExecという機能によって、CGIプログラムは"自分"によって実行されるんでしたね。 だから、CGIファイルには"自分"に実行権を与えるんでした。 で、sendmailは、sendmailが実行している、そのサーバーのアカウントを知っていて、 エラーメールをその人に送るんだそうです。
エラーメールは、Fromに送って欲しいですよねぇ。 エラーメールを受けとる、そのアカウントの人が、そのアカウントに届いたメールを 読める環境にあるかどうかだって分かりませんし。 メールを読めない場合、エラーメールは事実上消えてなくなることになります。 これは困った。
それで、エラーメールを受け取る人を指定したいわけです。 Fromのメールアドレスにエラーメールが送られるようにしたいわけですね。 調べてみて、その方法が分かりました。 sendmailを開くときに、次のオプションを付けます。
sendmail -f (メールアドレス)
この -f オプションによって、送信元のメールアドレスを指定すると、 このアドレスにエラーメールが送られるんだそうです。 ホッ。簡単ですね!
ということで、メール送信関数を修正しました。
(変更点のみ記載)
(変更前)
if (! open(MAIL, "| $sendmailpath -t")) {
return 0;
}
(変更後)
if (! open(MAIL, "| $sendmailpath -t -f $from_adr")) {
return 0;
}
わざと存在しないメールアドレスをToに指定してみてテスト。 ちゃんと、エラーメールを受け取ることができました!
以前作って、このサイトで使っている掲示板CGIプログラムですが、 書き込みがあったらメールで管理人にその書き込みを通知する機能を付けています。 それがちゃんと動いていませんでした。 書き込みがあっても、メールの通知が来ないんですよ! それで調べたところ、メールの送信先アドレスを間違えていたことが分かり、 正しいアドレスに変えたらちゃんと送られるようになりました。 それで一応解決したんですが、疑問に思ったのは、「なぜエラーメールが来ないのか?」でした。 ということで、さらに調べて、その結果がこの研究です。 いやー、奥が深いというか、いろいろトラブルが起きますね (^^;
|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
| Copyright (c) 'PERL-LABO' All Rights Reserved. リンクフリーです。 |