Apache(CGI)からのsendmail呼び出しについて

このQ&Aのポイント
  • レンタルサーバ(専用サーバ)でWeb上からメール送信を行おうとするとsendmailエラーが発生する
  • クライアント画面(Web)とsendmailのエラーログにはエラーメッセージ「Data format error」が表示される
  • コマンドラインからの実行では問題なく動作しているが、Web経由だとエラーになる
回答を見る
  • ベストアンサー

Apache(CGI) からの sendmail 呼び出しについて

新規でレンタルサーバ(専用サーバ)を借りて、Web上(CGI)からメールの送信を行えるようにしたいのですが、Apacheを経由するとメールの送信に失敗してしまいます。 コマンドラインからPHP(cli)を実行した場合は問題なくメールを送る事ができているのですが、Web経由だとPerlとPHPのどちらもエラーになってしまいました。 phpのメール送信関数は念のため mail() 関数、および mb_send_mail() 関数の2つでテストしています。 また、PerlCGIからも送信テストを行っています。 エラー内容(sendmailのエラーログ)はPerl、PHPの場合ともにsendmailのエラーログだけ取得でき、同じ内容になりました。 apacheのエラーログは何も出力されませんでした。 ■動作確認済み(正常にメールが送信できました) -コマンドライン 1. > php -f mail.php 2. > echo '<?php $ret=mail("メールアドレス","subject","body"); echo "\nret=$ret \n"; ?>' | php ※ mail.php にメールを送るサンプルスクリプトを記述しています。 別環境(Localのテストサーバ)では正常に動作しているのを確認しました ■ 動作環境 ・レンタルサーバ(専用サーバ) OS: Red Hat Enterprise Linux ES release Apache version: 2.0.52 PHP version: 5.2.9 Perl version : 5.8.8 SELinux: Disabled suEXEC: 利用しない サーバドメイン:(ドメイン取得前のため、まだサーバ名と一致していません) PHP: mail() および mb_send_mail()関数はインストールされています sendmail: 通常のメール送受信は確認済みです(初期設定のまま触っていません) ・エラーログ クライアント画面(Web):PHP, perl共にエラーや警告なし apacheのエラーログ: なし sendmailのエラーログ: Mar 31 02:26:23 c15rx2b3 sendmail[7354]: n2UHQLdN007354: to=(メールアドレス), ctladdr=apache (48/48), de lay=00:00:02, xdelay=00:00:02, mailer=relay, pri=30095, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error Mar 31 02:26:23 c15rx2b3 sendmail[7354]: n2UHQLdN007354: n2UHQLdO007354: DSN: Data format error 「stat=Data format error」と「DSN: Data format error」がエラーメッセージの該当箇所になります。 コマンドラインで実行すると上記のエラーは出ずに正常にメールが送信できているので、原因が特定できず困っています。 気になる箇所としては 1.Server名が取得前ドメインになっているため、一致していない 2.sendmail のエラーログで relay=127.0.0.1 と自アドレスになっている (コマンドラインから実行した場合は relayのアドレスは外部のサーバになります) どのような設定変更が必要か、ご教授頂ければと思います。 足りない情報がありましたらご指摘ください。 よろしくお願い致します。

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

  • ベストアンサー
  • uwi
  • ベストアンサー率74% (55/74)
回答No.1

php.iniのsendmail_pathの設定はどうなっていますか? あとctladdr=apache となっているのも気になります。 (apacheのメールアドレスがあれば問題ないかも) 例えば mb_send_mail の additional_parameter を # mb_send_mail(to@example.co.jp, 'SUBJECT', 'MESSAGE', "From: from@example.co.jp", "-ffrom@example.co.jp"); 指定したり、変わることがないならphp.iniのsendmail_pathで指定してはどうでしょうか?

参考URL:
http://jp2.php.net/manual/ja/function.mb-send-mail.php
seelefs
質問者

お礼

ご回答ありがとうございます。 sendmail_pathの設定についてはphp.iniにて sendmail_path /usr/sbin/sendmail -t -i で設定してあります。 phpからの呼び出しを additional_parameter を指定して試したところ、mail(), mb_send_mail() 関数共に送ることができました。 additional_parameter で-f 引数を設定が必須ですがメールは無事送る事ができました。 ありがとうございますm(_ _)m ctladdr=apache の部分が原因のようですので、今後新たに分かった事がありましたら補足させて頂きます。

seelefs
質問者

補足

メールが送れなかった原因ですが、ご指摘の通りapacheユーザのメールアドレスとのマッピングが上手くいっていなかった事が恐らく原因のようです。 apache のメールアドレスは存在しているので、sendmail 側の設定が必要になってしまうようですので、今回はここで切り上げる事にしました。 (メールサービスが稼働しており、下手に弄れない状況です) とりあえずはスクリプト(PHP)側から-f オプションを指定して行う方向で進めたいと思います。

関連するQ&A

  • sendmail

    PerlやPHPにはsendmailを使ってメール送信する関数があったと思いますが、sendmailというメールサーバを起動していなくてはいけないのですか? メールサーバならsendmailサーバの他にpostfixやqmailなどがあるじゃないですか。

  • centos5でsendmailのエラー

    WebARENA SuitePROV2でCentOS5を運用しています。 メールはgoogle appsを利用しているので、Centosはウェブサーバー専用(apacheとmysql)にしていました。 しかしウェブサイトにフォームメールを導入することになったため 今まで停止していたsendmailを起動し、chkconfigで自動起動設定をonにしましたが maillogにエラーが発生してしまい送信メールが届きません。 [maillogのエラー] localhost sendmail[23590]: n6CANlqW023590: n6CANlqX023590: DSN: Service unavailable localhost sendmail[23590]: n6CANlqX023590: to=apache, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=32378, relay=[127.0.0.1], dsn=5.0.0, stat=Service unavailable localhost sendmail[23590]: n6CANlqX023590: n6CANlqY023590: return to sender: Service unavailable localhost sendmail[23590]: n6CANlqY023590: to=postmaster, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=33402, relay=[127.0.0.1], dsn=5.0.0, stat=Service unavailable localhost sendmail[23590]: n6CANlqX023590: Losing ./qfn6CANlqX023590: savemail panic localhost sendmail[23590]: n6CANlqX023590: SYSERR(apache): savemail: cannot save rejected email anywhere googleで調べてみると「管理者用のメールアドレス(postmaster)へ送られてくるメールが実在する宛て先へ届くように設定されていない」のが原因らしいのですが、どのように設定するのか分かりませんでした。 http://www.ssl.fujitsu.com/products/network/netproducts/sendmail/faq/faq1-32.html また、全く関係ないかもしれませんが、/etc/hosts には 127.0.0.1 localhost.localdomain localhost とありました。 /etc/hostsは下記のように変更した方がよいのでしょうか? 127.0.0.1 localhost.localdomain localhost ↓ 127.0.0.1 localhost.自ドメイン.com localhost よろしくお願い致します。

  • sendmailとApacheを別々のサーバで使用する方法を教えて下さい

    Apacheとsendmailを別々のサーバで起動し、ApacheのサーバのCGIから別サーバのsendmailを利用してmailを送信する方法を教えて下さい。

  • cgi-perl の sendmail について

    cgi-perlのsendmailを使ってWebサイトに問い合わせフォームを作っています。 2つのサイトを同じサーバーに持っているのですが、かたやきちんと送信できるのに、片方はメールが届きません。 メールが届かない方も送信ボタンを押すときちんと出るべき”メールが送信されました”というメッセージは出ます。 このような場合、どこをチェックしたらいいのでしょうか。 もう何度もcgiファイル、htmlファイルを確認して、属性なども確認しているつもりなのですが、きっとどこかが違っているのだと思います。 いっそエラーが出てくれれば、わかりやすいのですが、行き詰っています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • Apacheのエラーログ

    500のインターネットサーバーエラーの有名なエラーですがはまっています。 Apacheのエラーログを見ているのですが、 Premature end of script headerというエラーがわからずに困っています。 何が悪いのでしょうか?OSはVine Linuxでサーバーを立てていて、 CGIはPerlです。 Perlは5.6.1 Apache 1.3.27 です。

  • sendmailでメール送信できない

    CentOS5.2で以下のようにメールを送信しようとしたのですが、 メール送信できません。 echo "test" | /usr/sbin/sendmail -t -i aaaa@***.co.jp メールログは以下のように出力されます。 Jul 14 19:06:25 rescodev sendmail[5243]: n6E9p9uj005211: to=<aaaa@***.co.jp>, delay=00: 15:15, xdelay=00:02:00, mailer=esmtp, pri=210276, relay=mx.***.co.jp. [211.13.204.14], dsn =4.0.0, stat=Deferred: Connection timed out with mx.***.co.jp. 内部的にメールを送信しようとしても同じエラーで送信できません。 ルーターで破棄しているわけでもないようです。 調べていて気になったのが、グローバルIPが固定でないことです。 固定でないと相手方のメールサーバーに拒否されてしまうのでしょうか。 いろいろ試したのですが、未熟なせいかどうしても送信できません。 どなたか、教えていただけないでしょうか。 よろしくお願いします。

  • 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で外部へ送信できない。

    こんにちは、初めて質問させていただきます。 非固定IPアドレス環境でfedora10搭載のsendmailを使って メールサーバー構築中ですが、外部への送信だけができません。 OP25対策でISP(so-net)メールサーバを中継させて送信できるように いろんな設定紹介サイトを参考にしながらOP25対策設定を 進めているのですが、なかなか上手く行きません。 /var/log/maillogを見ると以下のログが出ています。 server sendmail[2937]: n6M4YMrV002937: from=test, size=45, class=0, nrcpts=1, msgid=<200907220434.n6M4YMrV002937@server.test.test.jp>, relay=root@localhost server sendmail[2942]: n6M4ZHIL002942: from=<test@server.test.test.jp>, size=341, class=0, nrcpts=1, msgid=<200907220434.n6M4YMrV002937@server.test.test.jp>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1] server sendmail[2937]: n6M4YMrV002937: to=test@ab0.so-net.ne.jp, ctladdr=test (500/500), delay=00:00:55, xdelay=00:00:00, mailer=relay, pri=30045, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n6M4ZHIL002942 Message accepted for delivery) server sendmail[2944]: STARTTLS=client, relay=mail.so-net.ne.jp., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256 server sendmail[2944]: n6M4ZHIL002942: to=<test@ab0.so-net.ne.jp>, ctladdr=<test@server.test.test.jp> (500/500), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120341, relay=mail.so-net.ne.jp. 送信したメールは(reason: 530 5.7.0 Authentication required) との内容のメールが返ってきます。 設定内容の不備や不足している機能もあると思います。 全くの素人で、八方塞の状態で悩んでいます。 どなたかお知恵をお貸しください。 よろしくお願いします。

  • sendmailでローカルサーバ外にメールが送信できない

    Solaris10のデフォルトでインストールされている/usr/lib/sendmailで ローカルサーバ外にメールを送信することができません。 宛先をローカルサーバ内のアドレスにした場合、問題なくメールを 送信できるのですが、ローカルサーバ外のアドレスを指定すると、 メールが送信できません。 /var/log/syslog を確認したところ、以下のメッセージが 出力されていました。 --- Feb 4 12:12:02 ホスト名 sendmail[25774]: [ID 801593 mail.info] n1434WdZ025772: to=<外部アドレス>, delay=00:07:30, xdelay=00:07:30, mailer=esmtp, pri=120373, relay= mailhost, dsn=5.1.2, stat=Host unknown (Name server: mailhost: host not found) Feb 4 12:12:02 ホスト名 sendmail[25774]: [ID 801593 mail.info] n1434WdZ025772: n143C2dZ0257 74: DSN: Host unknown (Name server: mailhost: host not found) --- エラーではmailhostがないというようなメッセージがでています。 当サーバとほぼ同じネットワーク設定をしたSolaris9のサーバでは 問題なくメールが送信できていますが、Solaris10の場合はこのmailhostの 設定が必要なのでしょうか?

  • UNIXでsendmailを使うにはどのような設定が必要?

    PerlでWebページの一部分を取得して、それをパイプでシェルスクリプトに渡してメールで送る・・といったことをやりたいと思っています。環境はMac OS 10.5です。 PerlでWebページから目的の部分を抽出するところまではできたのですが、それをメールで送る方法が分かりません。 UNIXのシェルスクリプトを使って送りたいのですが、メールを送るためのsendmailコマンドを使ってみても指定したアドレスにメールが届きません。(エラーは出ず、処理自体は正常に行われているようです。) そもそも、sendmailコマンドを使うには何かメールの設定が必要でしょうか?メールサーバーの設定などもしたことがなく、あまり知識がありません。sendmailが/usr/sbin内にあることは分かったのですが・・ 設定方法、送信方法など教えて頂けないでしょうか? よろしくお願いします。