- ベストアンサー
phpでメール送信できません 原因がわかりませんので教えてください
送信ボタンを押すと以下のエラーがでます Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\sendmail.php on line 12 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sendmail.php:12) in C:\xampp\htdocs\sendmail.php on line 13 1.php.ini の設定は下記のとおりです。正しいでしょうか? [mail function] ; For Win32 only. SMTP = smtp.kss.biglobe.ne.jp smtp_port = 25 ; For Win32 only. sendmail_from = ・・・・@kss.biglobe.ne.jp xampで一括インストールしましたが5php.ini は 変更必要ですか?上記のように変更してしまいましたが。その他設定が必要なところはありますか。 2つのphpファイル リスト1 ・mail_input.php <html><head></head><body> <form method="POST" action="sendmail.php"> <input type="hidden" name="_email" value="自分のアドレス"/> <input type="hidden" name="_subject" value=""/> <input type="hidden" name="_result" value="<?php print($_SERVER['PHP_SELF']);?>"/> <table border="0"><tr> <th align="right">名前:</th> <td><input type="text" name="name" size="20"/></td></tr><tr> <th align="right">E-Mail:</th> <td><input type="text" name="_from" size="50"/></td> </tr><tr><th align="right">自由記入欄:</th> <td><textarea name="memo" cols="50" rows="5"/></textarea></td> </tr></table> <input type="submit" value="送信"/> <input type="reset" value="クリア"/></body></html> 「自分のアドレス」部分は受信したいアドレスをいれれば宜しいでしょうか?テストの場合でしたら自分の自宅のアドレスなど。それ以外に変更すべきところがありますか。 リスト2・sendmail.php <?php $header_info="From: ".$_POST['_from']." \nContent-Type:text/plain;charset =ISO-2022-JP\nX-Mailer:PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.="[".$key."]".$value."\r\n"; } } mb_send_mail($_POST['_email'],$_POST['_subject'] ,$body,$header_info); header("Location: ".$_POST['_result']); ?> ?リスト2の「 mb_send_mail 」の後に自分のアドレスとか実際は入れる必要がありますか?例えば ($_POST['abcd@hotomail.co.jp']みたいに。 自分のメールアドレス宛に送信されるようにテストしてますが一番上に記したエラーがでてしまい、送れません。素人なので細かくわかりやすく説明していただくとたいへん助かります。 上記のファイルは本を移しただけなので変更するべきところがありますか phpを使ってお問い合わせのページができることをめざしており、とりあえず自宅でテストをしてる状況です。よろしくお願いします。 自宅はbiglobe でネットやメールをしてます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> Warning: mb_send_mail() [function.mb-send-mail]: > Failed to connect to mailserver at "smtp.mail.biglobe.ne.jp" 「smtp.mail.biglobe.ne.jp」というのは smtp は付加せずに 「mail.biglobe.ne.jp」ではないのでしょうか? # SMTP サーバは別に伏字にする必要もないですから、 # そのままだと思いますので。
その他の回答 (5)
- x415f484f
- ベストアンサー率71% (57/80)
> 現在のエラーです 以前と変わりました 2つです このエラー(警告)の英語を訳して確認してみましたか? # 英語が苦手なのであれば辞書をお使いになって訳してみてはいかが # でしょうか? 訳し方にはかなり癖がありますが自動翻訳サイトも # あります。 > Warning: mb_send_mail() [function.mb-send-mail]: > Failed to connect to mailserver at "localhost" port 25, > verify your "SMTP" and "smtp_port" setting in php.ini > or use ini_set() in C:\xampp\htdocs\sendmail.php on line 9 前回と同様に「localhost のポート 25 に接続に失敗した」と言う意味です。 それと「php.ini や ini_set() 関数の SMTP や smtp_port の設定を検証 (確認)しなさい」と言う意味です。 > Warning: Cannot modify header information - headers already sent by > (output started at C:\xampp\htdocs\sendmail.php:9) > in C:\xampp\htdocs\sendmail.php on line 10 これも前回と同様ですが、あなたが仰るように sendmail.php が正しい のであれば、先のエラー(但し warning とは警告の意味)のメッセージを 出していることで HTTP ヘッダが書き出せないということだと思います。 > Apacheの再起動とはXAMPPコントロールパネルの更新ボタンを > 押せばよろしいでしょうか。 そうではなくて「停止」を押して「起動」をするのです。 > phpinfo() を確認しました。 > Loaded Configuration File 「c:\xampp\apache\bin\php.ini」です それで合っています、その「php.ini」を書き替えるのです。 「c:\php\php.ini」は Apache(mod_php5) からは使われていません。 ちなみに PHP Switch を使ったりすると置き換わってしまいます。 ここに説明がありますので読んでください。 http://localhost/xampp/phpswitch.php ※ php4 と php5 を切り替えるためのものです。 意味が判らない場合は php switch を実行してはいけません。 また php4 を使うと MySQL で不具合が発生することがあります。 > PHP Core > short_open_tag On On > SMTP localhost localhost > smtp_port 25 25 > 上記のこの状況は正しいのでしょうか? 正しくありません、「c:\xampp\apache\bin\php.ini」を書き替えした 内容になっていません。 前述した正しい方法で Apache を再起動して下さい。 まだエラーが出るかも知れませんが、またその時にご質問なさって ください。
- x415f484f
- ベストアンサー率71% (57/80)
ANo.1 補足部分からの引用 > やりましたが変化ありません。 念のため改めてお使いの環境を書いて頂けませんでしょうか? OS、XAMPP のバージョン、インストール先等 それと php.ini や PHP スクリプトを編集しているテキストエディタ等。 そうでないと適切なアドバイスをするのが容易ではありません。 エラーメッセージからすると XAMPP かと思われるので php.ini について 次のような確認方法で良いと思います。 http://localhost/xampp/phpinfo.php にアクセスして phpinfo() を 確認してみて下さい。 Loaded Configuration File (ここの文字) おそらく「c:\xampp\apache\bin\php.ini」だと思われます、その ファイルを必ずどこかにバックアップをした後で編集して下さい。 編集後に Apache の再起動を行い Loaded Configuration File に示されているファイル名が同じか もう一度確認して下さい。 その表示から何行か下に Configuration PHP Core という項目の下に表があるので、次の箇所が反映されているか 確認して下さい。 Directive Local Value Master Value (略) SMTP (ここの文字) (ここの文字) smtp_port (ここの文字) (ここの文字) この設定がうまくいけばメールを送ることが可能になります。 その後に起きる問題はインターネットサービスプロバイダに依存される ことです。 メール送信に関して考えられる問題は (1) POP before SMTP (2) SMTP AUTH (3) Outbound Port25 Blocking (接続しているプロバイダの SMTP であれば関係ないと思います) などが考えられます。 もし、そのような問題が発生したらまたご質問なさってください。 > 最初の質問のとおり 1行目から <?php ではじまり > 何も記載されていない行はありません。 はい、わかりました。しかしご提示なされたエラーメッセージから しか判断できません、エラーメッセージの意味がそうなのです。 sendmail.php に関しては「<?php」の前には行だけではなく文字も 入れてはいけません。
補足
現在のエラーです 以前と変わりました 2つです Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\sendmail.php on line 9 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sendmail.php:9) in C:\xampp\htdocs\sendmail.php on line 10 環境です windows 2000 XAMPP Windows版 1.6.6a テキストエディタ Tera PAD 質問です。Apacheの再起動とはXAMPPコントロールパネルの更新ボタンを押せばよろしいでしょうか。 http://localhost/xampp/phpinfo.php にアクセスして phpinfo() を 確認しました。 Loaded Configuration File 「c:\xampp\apache\bin\php.ini」です PHP Core short_open_tag On On SMTP localhost localhost smtp_port 25 25 上記のこの状況は正しいのでしょうか? 現在 [mail function] ; For Win32 only. SMTP = smtp.kss.biglobe.ne.jp smtp_port = 25 ; For Win32 only. sendmail_from = aaaa@kss.biglobe.ne.jp php.iniのファイルはc¥xampp¥apache¥bin¥php.ini これを変更すれば宜しかったでしょうか。今上記のように変更してあります。 c¥xampp¥php¥php.ini ここにも同じ名前のファイルがありますがこれも 上記のように変更してよかったですか。今は上記のように変更してあります。 mail_input.php <html> <head> <title>10日でおぼえるPHP5入門教室(アンケート)</title> </head> <body> <h1 style="background:#cccccc"> 10日でおぼえるPHP5入門教室(アンケート)</h1> <form method="POST" action="sendmail.php"> <input type="hidden" name="_email" value="ryo-y-ank@kss.biglobe.ne.jp" /> <input type="hidden" name="_subject" value="10日でおぼえるPHP5入門教室" /> <input type="hidden" name="_result" value="<?php print($_SERVER['PHP_SELF']);?>" /> <table border="0"> <tr> <th align="right">名前:</th> <td><input type="text" name="name" size="20" maxlength="30" /></td> </tr><tr> <th align="right">E-Mail:</th> <td><input type="text" name="_from" size="50" maxlength="255" /></td> </tr><tr> <th align="right" valign="top">自由記入欄:</th> <td><textarea name="memo" cols="50" rows="5"></textarea></td> </tr> </table> <input type="submit" value="送信" /> <input type="reset" value="クリア" /> </form> </body> </html> sendmail.php <?php $header_info="From: ".$_POST['_from']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.="[".$key."]".$value."\r\n"; } } mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info); header("Location: ".$_POST['_result']); ?> すごく悩んでいてとにかく今の状況から打開したいです。知識がなくて 申し訳ありませんがx415f484fさんアドバイスお願い致します。 よろしくお願いします。
- x415f484f
- ベストアンサー率71% (57/80)
訂正です、大変失礼致しました。 誤 > mb_send_mail($_POST['_email'],$_POST['_subject'], > $body,$header_info, 'abcd@hotomail.co.jp'); 正 mb_send_mail($_POST['_email'],$_POST['_subject'], $body,$header_info, '-f abcd@hotomail.co.jp'); となります。 sendmail に渡すパラメータですので '-f abcd@hotomail.co.jp' と しなければいけません。申し訳ありませんでした。
- x415f484f
- ベストアンサー率71% (57/80)
※ 先ほど記述し忘れておりましたので。 > <input type="hidden" name="_email" value="自分のアドレス"/> (略) > 「自分のアドレス」部分は受信したいアドレスをいれれば宜しいでしょうか? それでよろしいかと思います。 > リスト2の「 mb_send_mail 」の後に自分のアドレスとか実際は入れる > 必要がありますか? bool mb_send_mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameter ]] ) この $additional_parameter のことでしょうか? Return-Path の指定があると送信したメールが宛先不明などのエラーの 場合にエラーメールを返してもらえるので入れておくことをお薦めします。 > 例えば ($_POST['abcd@hotomail.co.jp']みたいに。 これは違います。 $_POST[] というのはフォームの値がデコードされたものが入るのです。 <input type="hidden" name="_subject" value=""/> この name="_subject" の _subject をキーとして value の値を得る ことに使います。 $_POST['_subject'] というような使いかたです。 ですから mb_send_mail($_POST['_email'],$_POST['_subject'], $body,$header_info, 'abcd@hotomail.co.jp'); とします。 ANo.1 から引用 > sendmail.php はエンコードを JIS(ISO-2022-JP) して保存して下さい。 > ただし場合によっては文字が化ける可能性があると思われます。 サブジェクトや送信者名に全角文字が使われている時は MIME エンコードが必要になります。(メールアドレスはエンコードしては いけません) エンコードに関しては、私が以前回答させて頂いたものがあるので こちらの URL を参照して下さい。 http://oshiete1.goo.ne.jp/qa3887913.html # 蛇足の部分なのですが。
補足
bool mb_send_mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameter ]] ) 上記の記述は自分の作ったファイルには存在しませんがこのように追加すべきですか?もしくは変更すべきですか?もし変更するのならどの部分を削ってどの部分に挿入すれば良いか教えていただけませんでしょうか。 私としては とにかく自分のメールアドレスにメールを届けたいので自分の作ったリスト2(リスト1)の書き方がオーソドックスでないようでしたらこれを(送信先=自分のアドレスとSMTPの部分だけ変えて)コピーすればすぐに試せるというサンプル(mb_send_mailを使った)を紹介していただけるとたいへん助かり勉強になります。 わがままを言ってもうしわけありませんがよろしくお願いいたします。
- x415f484f
- ベストアンサー率71% (57/80)
> Warning: mb_send_mail() [function.mb-send-mail]: > Failed to connect to mailserver at "localhost" port 25, > verify your "SMTP" and "smtp_port" setting in php.ini > or use ini_set() in C:\xampp\htdocs\sendmail.php on line 12 これは php.ini の設定が反映されていない状態であると思われます。 localhost とはご自分のパソコンのことですので、ご自身のパソコンを メールサーバーと認識して送信して失敗しています。 > 1.php.ini の設定は下記のとおりです。正しいでしょうか? この箇所に関しての php.ini の設定は合っていると思います。 XAMPP かと思われるので php.ini の設定は問題ないのではないかと 思うのですが……、結果的には php.ini が反映されていません。 もしかすると Apache を再起動してないのではないのでしょうか? これをご確認のされた後にもエラーとなるのであれば次の作業もして 試してみて下さい。 php.ini をどこのディレクトリに保存されているかはお書きになられて ませんが、取り敢えず php.ini を C:\WINDOWS にコピーしてみて下さい。 (もしも Windows 2000 なら C:\WINNT にコピーしてみて下さい。) その後に Apache を再起動して下さい。 > Warning: Cannot modify header information - headers already > sent by (output started at C:\xampp\htdocs\sendmail.php:12) > in C:\xampp\htdocs\sendmail.php on line 13 このエラーは HTTP ヘッダ(Location: の箇所)を送信する前に空の行が 送信されたのではないかと思われます。 おそらく sendmail.php の先頭に空の行があると思われます。 sendmail.php には空の改行を入れないようにして下さい。 > phpを使ってお問い合わせのページができることをめざしており、 > とりあえず自宅でテストをしてる状況です ご自身のパソコンで php.ini の設定がどうしても反映されない時は 一度、実際のサーバにアップロードして確かめてみて下さい。 あと気になるところと言えば sendmail.php のメールのエンコードの お行儀が悪いと思います。(これは書籍の例が悪いのでしょう) sendmail.php はエンコードを JIS(ISO-2022-JP) して保存して下さい。 ただし場合によっては文字が化ける可能性があると思われます。
補足
>Windows 2000 なら C:\WINNT にコピーしてみて下さい。 その後に Apache を再起動して下さい。 やりましたが変化ありません。 >このエラーは HTTP ヘッダ(Location: の箇所)を送信する前に空の行が 送信されたのではないかと思われます。 おそらく sendmail.php の先頭に空の行があると思われます。 最初の質問のとおり 1行目から <?php ではじまり 何も記載されていない行はありません。(質問の意図が間違えてるかもしれませんがすみませんがリスト2と書いた部分を確認していただけますでしょうか)
補足
言われたとおりやりましたらphpinfo() に反映されましたのでうまくいきました。 sendmail_from 自分のアドレス 自分のアドレス sendmail_path no value no value serialize_precision 100 100 short_open_tag On On SMTP smtp.mail.biglobe.ne.jp smtp.mail.biglobe.ne.jp smtp_port 25 25 しかし前回と同じエラーがまだ出てしまいます。 Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "smtp.mail.biglobe.ne.jp" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\sendmail.php on line 9 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sendmail.php:9) in C:\xampp\htdocs\sendmail.php on line 10 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー (1) POP before SMTP (2) SMTP AUTH (3) Outbound Port25 Blocking (接続しているプロバイダの SMTP であれば関係ないと思います) 仰るとおり上記の設定に問題があるのでしょうか。 自分でも調べましたがどこを変更すれば良いかわかりませんでした。 確認すべきところはありますでしょうか。 お忙しいところすみませんがアドバイスいただけると大変助かります。 よろしくお願いします。