- ベストアンサー
PHPでメールを送信するには
PHP超初心者です。 参考本をもとにPHPでメールを送信するということにチャレンジしているのですが、次のような文章が出ます。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11 エラー:送信に失敗しました 参考本に書いてあるとおり、 php.iniのSMTP=localhost を自分が使っているoooooo@ocn.ne.jpに書き換え、sendmailには自分の別アドレスを記述したのですが。 11行目のエラーも何を指しているのかわかりません。 ご回答よろしくお願いします。 【mail.php】 <html> <head><title>mail.php</title></head> <body> <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type:text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 【mail_form.html】 <html> <head><title>メールの送信</title></head> <body> <h2>メールの送信</h2> <form action="mail.php" method="post"> 宛先:<input type="text" name="address"><br /> 件名:<input type="text" name="subject"><br /> 本文:<br /><textarea name="message" rows="5" cols="30"></textarea><br /> <input type="submit" value="送信"> </form> </body> </html>
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
まだFromのところでつまづいてるみたいです。 下記の3点をチェックしてダメだったらお手上げかも。 1. php.iniはどこにおいてますか? Windows上でphpを動かす場合、php.iniはC:\Windows以下になければphp.iniが有効にならない場合があります。 試しに、下記のようなファイルをどこかに作成してみてください。 <?php phpinfo(); ?> この状態で、 php.iniの適当な設定を変更 →Apache再起動 →上記のファイルにアクセス(phpの設定情報が表示されます) →php.iniの変更内容が反映されているか確認 この手順で、きちんと変更内容が反映されているか確認してみてください。 また、その際に「SMTP」と「send_mail_form」が設定されているかも確認しておくとよいです。 2. SMTPとsend_mail_fromの再確認 前項でも触れましたが 「php.iniで意図した内容に設定されているか。タイプミス等ないか」 「phpinfo()で確認した内容が、上記の設定と相違ないか」 もし、設定内容がphp.iniと異なる場合はphp.iniを設置するディレクトリをC:\Windows以下等にしてみてください。 3. $header変数にFrom行を加える 最悪、send_mail_fromが設定されていない場合でもSMTPサーバーが起動していれば 標準の設定でメールが送信されるはずです。 最初に提示して頂いたソースのうち、ヘッダ($header)を定義している部分を 昨日説明したように、下記の通り編集してみてください。 $header="Content-Type:text/plain;charset=iso-2022-jp"; ↓ $header = "Content-Type: text/plain; charset=iso-2022-jp\n"; $header .= "From: hoge@example.com"; 「hoge@example.com」はあなたの自分のメールアドレスに変更してくださいね。 これをするだけで、少なくとも「Warning: mb_send_mail (略) on line 11」というエラーは発生しなくなるはずです。
その他の回答 (5)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
> ; For Win32 only. > SMTP = 127.0.0.1 > smtp_port = 25 > > ; For Win32 only. > ;sendmail_from = oooooo@bridge.ocn.ne.jp 1.localhostがメールサーバの役割を担っていないのなら、SMTPの設定は プロバイダから割り振られているSMTPサーバ名を指定する事。 semdmail_fromの先頭の「;」を削除する事。 2.Webサーバを再起動する。 3.プログラム上のメールヘッダ($header)って、fromがないとエラーになるんじゃありませんでしたっけ。 mb_send_mail()からの引用 > mb_send_mail() は、 mail() のラッパ関数です。詳細は、 mail() を参 > 照ください。 mail()からの引用 > メールを送信する際には、必ず From ヘッダが含まれていなければなり > ません。 additional_headers パラメータで指定するか、 あるいは > php.ini にデフォルト値を指定します。 > > 指定しなかった場合は、以下のようなエラーメッセージが返ります > Warning: mail(): "sendmail_from" not set in php.ini or custom > "From:" header missing 。 Windows では、From ヘッダを設定すると > Return-Path も設定されます。
お礼
ご回答ありがとうございます。 あ~コレが原因かもです。 sendmail_fromの前の「;」をとってみたら、プロバイダから割り振られているSMTPサーバ名でも送信できました。 ありがとうございます。 とても勉強になりました。
- moon_night
- ベストアンサー率32% (598/1831)
メール送信部分のソース(またはエラーが起こっている行辺り)を補足してもらえませんか?
- shogo0809
- ベストアンサー率47% (25/53)
・SMTPサーバー(今回はMELON)は起動してから試してますか? ・php.iniを書き換えた後、HTTPサーバー(An HTTPdでしょうか)を再起動していますか? ・「できない」とはどんな状況でしょうか? → エラーで送信できない、エラーは起きないがメールが届かない等 → 英文のエラーが出る場合はその内容をここに書いてもらえるとアドバイスしやすいです 今日はもう寝るのでこの辺で…… 明日、まだ閉じていなかったらチェックするつもりです。 がんばって~
お礼
あ・・ 先に寝ちゃいましたね・・・ 聞いておいて、すいません・・・・ で、今やっているのですが、 MELONは起動しています。下のツールバーに表示されています。 HTTPサーバはApacheです。再起動させています。 http://localhost/php10/mail_form.html(←ファイルを格納している場所です)からメールの送信ページに入り、入力→送信すると、以下のエラーが出ます。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11 エラー:送信に失敗しました もちろん、何も送られてこない状況です。 たびたび申し訳ありません。
- shogo0809
- ベストアンサー率47% (25/53)
#1です。どのように設定したのでしょうか? リンク先は「Windows上でmb_send_mailを試す最低限の手順」を説明しています。 是非ご覧になってください。 ここで説明しても同じ内容になってしまうだけですので……。 ちなみに、SMTPを外部サーバーにするのも確かに手ではありますが そういった外部からのメール送信を受け付けているメールサーバーは今時あまりありません。 セキュリティ的に問題となってしまうので・・(SPAM発信源にされてしまう あと、$headerにFrom行がないというのは「sendmail_fromを設定しない場合」に必要な処理がありませんよ、という意味です。 その場合 $header="Content-Type:text/plain;charset=iso-2022-jp"; を $header = "Content-Type: text/plain; charset=iso-2022-jp\n"; $header .= "From: あなたのメールアドレス"; の様に書き換えることで、send_mail_from以外のアドレスを差出人として設定可能、ということです。 それじゃあ、がんばってください。
お礼
たびたびご回答ありがとうございます。 リンクにしたがってやってみました。 php.ini の、”SMTP”と”smtp_port”を下記のように設定します。 [mail function] ; For Win32 only. SMTP = 127.0.0.1 smtp_port = 25 melon.ini(MELONの設定ファイル)の設定も php.ini と同じにします。 [ssmtpd] ListenIP=127.0.0.1 ListenPort=25 ですが、できませんね・・・う~ん 初心者なのでもっと基本的な部分が間違ってるかもしれないですね・・
- shogo0809
- ベストアンサー率47% (25/53)
・差出人のデフォルト設定(php.iniのsendmail_from)が設定されていない ・その上で$headerにFrom行が含まれていない ことによるエラーです。 > 参考本に書いてあるとおり、 > php.iniのSMTP=localhost を自分が使っているoooooo@ocn.ne.jpに書き換え、sendmailには自分の別アドレスを記述したのですが。 どの本を読んでいるのかわかりませんが、随分いい加減な内容です。 SMTPという設定は「SMTPサーバーのホスト名またはIP」を設定する部分で メールアドレスは逆に先ほどのsendmail_fromに設定するべき内容です。 sendmail_from=oooooo@ocn.ne.jp Windows上で試している場合、何もせずにSMTP=localhostのままでは動かないのも事実です。その場合は ・外部のSMTPサーバーを指定する →SMTP=xxx.ne.jpのように外部のサーバーのアドレスを設定する ・Windows上にSMTPサーバーを構築する →SMTP=localhostのままでOK のどちらかを選択することになります。 参考までに、Windows上でSMTPサーバーを構築し、PHPからメールを送信する方法が下記のURLにあります。 http://readygo.s8.xrea.com/php/php_ls01.php
お礼
ご回答ありがとうございます。 大変申しわけありません。自分の記述ミスです。 で、おっしゃるように設定したのですが、ダメです。 あとエラーメッセージの「$headerにFrom行が含まれていない」というのはどこをさしているのかいまいちわかりません。 ちなみにリンク先はまだ試していません。 いったん普通にできてからためそうかと・・・
お礼
phpinfo(こんなのあるんですね)から見ると、sendmail_from のところがno valueになっていました。 設定されていないってことですよね? SMTPは127.0.0.1に設定されていました。 で、一応$headerのところをご指摘どおり変更したらメール送信できました。 $headerにfromを加える の意味がわかりました。 念のため、php.iniの修正は以下のとおり行っています。 [mail function] ; For Win32 only. SMTP = 127.0.0.1 smtp_port = 25 ; For Win32 only. ;sendmail_from = oooooo@bridge.ocn.ne.jp