sendmailの送信エラーを捕捉する(実験編)
- [Perl]
CGIからsendmailでメール送信するときに、送信に成功したかエラーになったかを取得する方法を調べてみたのでとりあえず実験編です。
まず、送信エラー時にエラーメールを返す、ってやつ。通常メールクライアントからSMTPに投げると返ってくるけど、同じことをさせるには、sendmailの-fオプションで返信先を指定します。sendmailについてはsendmailのman page[www.linux.or.jp]が参考になります。ためしにてきとうなアドレスに送ってみたら、ちゃんと返ってきました 笑。
も一個、sendmailは実行時にステータスを返してくるのを取得してみよう、ってやつ。特殊変数$?にステータスコードが入ってくる・・・はずだけど、そのような条件を作れませんでした。なので、定数を宣言したのみ。まあ、画面出力してみてます。
#!/usr/bin/perl *EX_OK = \0 ; #/* successful termination */ *EX__BASE = \64; #/* base value for error messages */ *EX_USAGE = \64; #/* command line usage error */ *EX_DATAERR = \65; #/* data format error */ *EX_NOINPUT = \66; #/* cannot open input */ *EX_NOUSER = \67; #/* addressee unknown */ *EX_NOHOST = \68; #/* host name unknown */ *EX_UNAVAILABLE = \69; #/* service unavailable */ *EX_SOFTWARE = \70; #/* internal software error */ *EX_OSERR = \71; #/* system error (e.g., can't fork) */ *EX_OSFILE = \72; #/* critical OS file missing */ *EX_CANTCREAT = \73; #/* can't create (user) output file */ *EX_IOERR = \74; #/* input/output error */ *EX_TEMPFAIL = \75; #/* temp failure; user is invited to retry */ *EX_PROTOCOL = \76; #/* remote error in protocol */ *EX_NOPERM = \77; #/* permission denied */ *EX_CONFIG = \78; #/* configuration error */ *EX__MAX = \78; #/* maximum listed value */ *CNST_SENDMAIL = \'/usr/sbin/sendmail'; *CNST_RETURN_PATH = \'ba@zen.or.jp'; print "Content-Type: text/plain\n\n"; eval { open MAIL, "| $CNST_SENDMAIL -t -f $CNST_RETURN_PATH" or die $!; my $mail = <<END_MAIL; From: $CNST_RETURN_PATH To: foo\@bar.baz Subject: test mail This is test This is test . END_MAIL print MAIL $mail; close MAIL; print "$?"; }; print "$@" if ( $@ );
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/159
コメント
www
test
www
・・・なんでここにテスト?(^-^;)
したいことが載っていたのでとても参考になりました。
同じレンタルサーバー業者使っているようなので
これまた心強いです。
サイトデザインも素敵ですね。
みかさん、はじめまして。
ロリポお使いなのですかね。
よろしければURL教えてください。
サイトデザインは気が向いたらちょっとずついじったりして
なかなか完成にはならないですね。
また遊びに来てくださいね。