- ベストアンサー
sendmailで存在しないアドレスのエラー
sendmailを悪戦苦闘の末、ようやく使えるようになりました。それはめでたいのですが、どうもレンタルしているocnのサーバーではメールアドレスの贈り先が存在しない(空ではなく送り先メールアドレスの存在)とエラー画面になってしまうようなんです。 &mail_sub というsub関数を作っていてこれをcgiから呼び出しています。送れないまでも、エラーで画面が止まってしまうのは避けたいんです。if(&mail_sub)みたいにエラーを感知できたら良いのですが・・。 分かる方、どうか教えて(助けて)下さいー!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
気になったんですが、そのような送り先が存在しない場合のエラーメールの送信先は定義しないんですか? sendmail のような、共有で使用するリソースの場合、誰が sendmail コマンドを叩いてエラーが起こったのかがわからない (多分、CGI の実行ユーザは、利用者で共有でしょうから…) 場合には、sendmail を発動させてるプロセスを kill している可能性があるかもしれません。 勝手な想像なので断言は出来ないですが、プロセスが kill されてるとかで500 エラーが返るのかもとふと思いました。 sendmail に -t オプション以外に、-f オプションで envelope-from を定義してあげれば、もしかしたら起こらないかも… という事で、仮に、mahouさんのメールアドレスをmahou@somedomain.domだとした場合、 # sendmail起動 if (!open(MAIL,"| $sendmail -t")) { print "メール送信に失敗しました"; } の行を、 # sendmail起動 if (!open(MAIL,"| $sendmail -t -fmahou\@somedomain.dom")) { print "メール送信に失敗しました"; } みたいにしたら、うまくいくかも。。。 勝手な想像だけなので、「お試しあれ」感覚でとらえてください。
その他の回答 (4)
- osamuy
- ベストアンサー率42% (1231/2878)
KCatchを利用してみては、どうでしょうか?
お礼
見てみたんですが、おいらの頭ではイマイチよく分かりませんでした…。ズビバセン。
- osamuy
- ベストアンサー率42% (1231/2878)
エラー・メッセージは、どうなってますか? CGI自体エラーになってなくても、正しいHTTP応答の形式になってないと、Webサーバーが500を返すこともあります。 基本的に、見たままのエラーメッセージや、具体的な入力内容、Webサーバーやメール・サーバーのログなどの補足情報も説明しとかないと、思い付く原因はたくさんありますから。 結構、errorlogだけで、あっさりと原因が判明することもありますし。
補足
osamuyさん、返信ありがとうございます。 Internal Server Errorで画面が真っ白になってしまってます。入力されたメールアドレスにメールを送るシステムなんですが、入力ミスかもしれないし、こうなることだけは避けたいのですが…。 perlでエラーをキャッチできないなら、サーバーの設定でしょうか。そうなるとレンタルサーバーなので無理になってきそうです、困りました…
- duckling
- ベストアンサー率47% (88/185)
送り先のメールアドレスが存在しない場合、 エラーを返すのはCGIではなくメールサーバです。 なので、CGIが存在しないメールアドレスを関知し エラーを返すことで「エラーで止まる」ということはありません。 # 1 の方が言っているように OCNは自作CGIが使えない可能性がありますし、 CGIが使えてもsendmailが使えないサーバなどありますので 一度仕様などを確認してみてはどうでしょうか。 それと、sendmailのパスは合ってますか?
補足
sendmailのパスは合ってます。 メール、ちゃんと送れてます。 ただ、メールアドレスが存在しないときに、 エラーになるんですよね。。。>SSIエラー? 同じ現象を味わったことある人居ますか?
- herb_garden
- ベストアンサー率47% (224/470)
OCNは、Page ONサービスでは、自分が用意したCGIは使用できないと思うのですが、 他のプランで、CGI可能にしてもらっているのでしょうか? それとも、OCNの用意している「フォームCGIメール」のことでしょうか?
補足
高額な、他のプランです。 メールプログラムは自分で作成したものです。 # sendmail起動 if (!open(MAIL,"| $sendmail -t")) { print "メール送信に失敗しました"; } print MAIL "To: $t_to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $mail_sub\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; print MAIL "\n"; print MAIL "$mail_body\n"; print MAIL "\n"; close(MAIL); どうでしょうか?
お礼
返信ありがとうございます! 今現在は妥協してしまい、そのまま使用することにしました。ただ、わかったことは、「相手先が存在しないとエラー」なのではなく、「メールアドレスの形」になってないと起こるエラーでした。 例えば、aaa@aaa.tekitouだとメールは送信されますが、aaa.tekitouだとエラー画面になってしまうのです。その辺、そのメールアドレスが存在しないとエラーと勘違いしてました。 次回、また開発があるのでそのときに試してみますね。 そしたら必ずnipotanさんに返信します。お待ち下さい。