• ベストアンサー

sendmailで存在しないアドレスのエラー

sendmailを悪戦苦闘の末、ようやく使えるようになりました。それはめでたいのですが、どうもレンタルしているocnのサーバーではメールアドレスの贈り先が存在しない(空ではなく送り先メールアドレスの存在)とエラー画面になってしまうようなんです。 &mail_sub というsub関数を作っていてこれをcgiから呼び出しています。送れないまでも、エラーで画面が止まってしまうのは避けたいんです。if(&mail_sub)みたいにエラーを感知できたら良いのですが・・。 分かる方、どうか教えて(助けて)下さいー!

質問者が選んだベストアンサー

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.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 "メール送信に失敗しました"; } みたいにしたら、うまくいくかも。。。 勝手な想像だけなので、「お試しあれ」感覚でとらえてください。

mahou
質問者

お礼

返信ありがとうございます! 今現在は妥協してしまい、そのまま使用することにしました。ただ、わかったことは、「相手先が存在しないとエラー」なのではなく、「メールアドレスの形」になってないと起こるエラーでした。 例えば、aaa@aaa.tekitouだとメールは送信されますが、aaa.tekitouだとエラー画面になってしまうのです。その辺、そのメールアドレスが存在しないとエラーと勘違いしてました。 次回、また開発があるのでそのときに試してみますね。 そしたら必ずnipotanさんに返信します。お待ち下さい。

その他の回答 (4)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.4

KCatchを利用してみては、どうでしょうか?

参考URL:
http://digit.que.ne.jp/work/index.cgi?KCatch
mahou
質問者

お礼

見てみたんですが、おいらの頭ではイマイチよく分かりませんでした…。ズビバセン。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

エラー・メッセージは、どうなってますか? CGI自体エラーになってなくても、正しいHTTP応答の形式になってないと、Webサーバーが500を返すこともあります。 基本的に、見たままのエラーメッセージや、具体的な入力内容、Webサーバーやメール・サーバーのログなどの補足情報も説明しとかないと、思い付く原因はたくさんありますから。 結構、errorlogだけで、あっさりと原因が判明することもありますし。

mahou
質問者

補足

osamuyさん、返信ありがとうございます。 Internal Server Errorで画面が真っ白になってしまってます。入力されたメールアドレスにメールを送るシステムなんですが、入力ミスかもしれないし、こうなることだけは避けたいのですが…。 perlでエラーをキャッチできないなら、サーバーの設定でしょうか。そうなるとレンタルサーバーなので無理になってきそうです、困りました…

  • duckling
  • ベストアンサー率47% (88/185)
回答No.2

送り先のメールアドレスが存在しない場合、 エラーを返すのはCGIではなくメールサーバです。 なので、CGIが存在しないメールアドレスを関知し エラーを返すことで「エラーで止まる」ということはありません。 # 1 の方が言っているように OCNは自作CGIが使えない可能性がありますし、 CGIが使えてもsendmailが使えないサーバなどありますので 一度仕様などを確認してみてはどうでしょうか。 それと、sendmailのパスは合ってますか?

mahou
質問者

補足

sendmailのパスは合ってます。 メール、ちゃんと送れてます。 ただ、メールアドレスが存在しないときに、 エラーになるんですよね。。。>SSIエラー? 同じ現象を味わったことある人居ますか?

回答No.1

OCNは、Page ONサービスでは、自分が用意したCGIは使用できないと思うのですが、 他のプランで、CGI可能にしてもらっているのでしょうか? それとも、OCNの用意している「フォームCGIメール」のことでしょうか?

mahou
質問者

補足

高額な、他のプランです。 メールプログラムは自分で作成したものです。 # 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); どうでしょうか?

関連するQ&A