• ベストアンサー

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

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

  • mahou
  • お礼率31% (10/32)
  • Perl
  • 回答数5
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • sendmailのしくみ

    OCN無料サーバーで CGI sendmailがありますが(独自CGI不可)  個別のページに 問合せ送信ボタンを付け それぞれ 違う メールアドレスに問合せ内容を送ることは可能なのでしょうか?

  • sendmailでエラーがでます

    PHPを勉強しはじめ、まず今までVBS(IIS)で書いていたメール送信プログラムを PHPで書き始めました。 環境:XP-SP2、PHP5.0.4、Apache2.0.53 mail_input.phpから、名前、メールアドレス、自由記入欄 を作り、その内容を 自分のメールアドレスに送るプログラム(sendmail.php)をPHPで作っています。 sendmail.php のサビの部分は以下です。 mb_send_mail($_POST['_email'],$_POST['_email],$body,$header_info); エラーメッセージは Fatal error: Call to undefined function mb_send_mail() in C:\Program Files\Apache Group\Apache2\htdocs\sendmail.php on line 9 です。 mb_send_mail()の設定が間違っているように思われます。 この為のphp.ini のマルチバイト関数修正点は 修正前: SMTP = localhost ;sendmail_from = me@example.com 修正後: SMTP = rapid.ocn.ne.jp sendmail_from = *****@rapid.ocn.ne.jp 上記2点以外はいじっておりません。 なおIISの時は、上記のような処理が出来ていたので、プロバイダ(ocn)のせいではないと思われます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • sendmailを使わないで送れるメールフォームを探しています。

    自宅サーバーでサイトを公開しているのですがsendmailが使えません。 あちこち探したのですが、配布されているメールフォームCGIはほとんどがsendmailを使うものでした。 次のようなメールフォームCGIをご存知の方よろしくお願いします。 (1)sendmailを使わないでプロバイダ(OCN)のメールサーバで送る (2)投稿者に自動返信ができる (3)送信先のアドレスが複数指定できる (4)添付ファイルが複数送れる (5)必須入力項目のチェックができる 勝手なことばかり申しますがよろしくお願いします。

    • ベストアンサー
    • CGI
  • SendMailがエラーを返さない

    VBでBSMTP.DLLのSendMailを使ってメール送信するプログラムを使っています。 相手先アドレス不正などの場合は、SendMailの戻り値でエラーを識別できるのですが、正常終了しているにも関わらずそのメールが相手先に到着しないという現象が出ています。 原因として、どういうことが考えられるでしょうか? 心当たりのある方がいらっしゃいましたら、ご指導をお願いいたします。 ret = SendMail(SMTP_SVNm, szTo, szFrom, szSubject, szBody, szFile) If Len(ret) <> 0 Then MsgStr = "送信エラー" Else MsgStr = "送信完了" End If

  • sendmail 送信エラーについて

    RedhatES4.5 sendmail-8.13.1-3 メールの送信テストを行っております。 あるドメイン宛てへのメールの送信テストをしています。 アカウントが存在しないメールアドレス宛て (送信先は管理外ドメイン)への、メールのを送信した際に 送信元メールサーバーのエラーで不可解な動作をしております。 原因がわかるかたがおりましたら、ご教授ください。 送信アドレスは毎回同じ testtest@xxxx.xx.xx 相手先にメールボックスが無いので、エラーで戻されるのは理解できるのですが 以下の2通りのエラーが出ます。 1.dsn=5.0.0, stat=Service unavailable 2.said: 554 Sorry, no mailbox here by that name. (#5.1.1) (in reply to RCPT TO command) 2は理解できるのですが、なぜ1のエラーで戻される場合があるのかが不明です。 ちなみに、存在するアドレスへは正常に送信出来ております。

  • sendmailのテスト

    こんにちわ。 フォームに入力してもらった情報をsendmailで自分のメールアドレスまで送ってもらうcgiを作成しているのですが、どのようなメールになるかローカルでテストしてみたいです。 どのようにすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • sendmailのCGIを実行させたい

    ブラウザ画面から入力した内容を取得して、sendmailするCGIを作ったのですが、プロバイダへ上げて実行させてみたら、何かでつまずいていてエラーになるんです! ちなみにプロバイダは、Hi-Hoなのですが、 #sendmailのパス $SENDMAIL = '/user/lib/sendmail'; と指定して、文字の復元・変換・ヘッダの成形をした後で、 #Sendmailでメール送信 open(MAIL, "| $SENDMAIL -i -t -f $FORM{'Email'}") or die("ERROR: exec sendmail."); print MAIL $header, $body; close MAIL; と記述してるのですが、全然うまくいかないんです。 どなたか、Help Me!!

    • ベストアンサー
    • CGI
  • mb_sendmailのエラーについて質問です。

    mb_sendmailのエラーについて質問です。 mb_sendmailでメールを送信する際に、 $re = mb_sendmail(…); という使い方をして、$reでメールの送信の成功と失敗を見分けようとしましたが、$re自体にはPHPの機能としての返り値はあるものの、実際にメールが届いたか届かなかったかの判断はできませんでした。例えばメールアドレスが間違っていたりして実際にメールが届いていない場合などはそのエラーをどういう風に拾えばよいでしょうか? PHPは自体は非常に安定しているので mb_sendmailでエラーが返ってくるようなことは殆どありませんが、メールそれ自体が届かないということは比較的たくさんあります。 そのようなエラー情報を取得するにはどうしたらよいでしょうか? 現在、Ubuntu 9.10で自前の送信メールサーバー(Postfix)とLAMP環境で開発しております。 よろしくお願いします。

    • 締切済み
    • PHP
  • 存在しないアドレス(グループ)に送信した場合

    Hotmailの自分のアドレスから、間違って、前に勤めていた会社のアドレスにメールを送ってしまいました。 (送り先は、グループアドレスで、それを指定するとそのグループに設定されている個人アドレスに自動転送されるものだったと思います。) 同僚に確認したところ、現在そのアドレスは存在しないとのことで安心したのですが、通常、存在しないアドレスに送った場合に送られてくるエラー連絡メールが送られてきていないため、心配しています。 エラー連絡メールが届いていないということは、そのアドレスがまだ存在していると考えた方が妥当でしょうか? 同僚にもあまりしつこく聞きづらく、またメールの内容が重要なもので困っております。よろしくお願い致します。

  • 【CGI】 sendmailの-fオプションって?

    Biglobeにてsendmailを使用可にしてメールを配信すると 自分のBIGLOBEメールアドレスがfromアドレスに設定されて メール送信がされます。 『-f オプションでfromアドレスの変更をしてください。』と http://homepage.biglobe.ne.jp/manual/sendmail/sendmail_shiyou.html ↑に書いてありますが、どの様に書き足せばいいのでしょうか? CGI全然わかんないもので、詳しくお願いします m(__)m

専門家に質問してみよう