- ベストアンサー
PHP の mail( ) 関数について
お世話になります。 PHPのmail( )関数の使い方を練習しようと思い、以下に添付した簡単なスクリプトを試してみましたが、エラーが出ました。 スクリプト: <?php $address = 'my_address@yahoo.ca'; $subject = 'test mail'; $message = "Hello, I'm sending you an e-mail message.\r\n If you can read this. please let me know.\r\n"; $headers[] = "From: from@company.jp"; $headers[] = "Cc:sales@company.com"; $headers[] = "Content-type: text/html; charset=UTF-8"; $headers = implode("\r\n", $headers); $result = mail($address, $subject, $message, $headers, '-fmy_address@yahoo.ca'); if($result){ echo "message was sent<BR>"; } エラーメッセージ: Warning: 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\PHP-practice\email.php on line 9 ちなみに、エラーメッセージにある hp.ini の 関連個所は次のようになっています。 [mail function] ; For Win32 only. ; https://php.net/smtp SMTP=localhost ; https://php.net/smtp-port smtp_port=25 詳しい方がいらっしゃいましたら、自分のスクリプトの問題点と解決方法について、何かヒントでも頂けると有り難いです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>自分はまだPHPの学習者で、自身のWebサイトを持っているわけではなく、 >単にXamppの上で練習スクリプトを作っているだけですので、 >プロバイダーなどとの契約はありません。 やはりそんな感じでしたか。 メール送信にはメールサーバが必要です。 で、そのメールサーバとして利用できる一つが、「あなたがインターネット接続に契約しているプロバイダ」です。 わざわざレンタルサーバを借りる必要はありません。 >Xampp環境下でのSMTPサーバのセットアップのようなことは可能なのでしょうか? 出来る出来ないで言ったら出来る話ではありますが、かなり面倒です。 言語学習の前に、サーバ構築の知識と実践が必要になり、言語学習に入れません。 ですから自分でメールサーバを立てるのはお勧めしません。 「簡単なメール送信プログラム」を動かすようにするために、100倍以上の苦労が必要となるでしょう。 まあ、それをやり通すのも良い勉強ではありますが。 PHPを学びたいならば、そこは本筋ではありません。 ---- で、XAMMP環境というのなら、回答No.1に引用したページを参考にしてもらえれば…というはずだったのですが、URLのコピペをミスりました。すみません。 正しいURLはこちらになります。 >XAMMP環境でPHPからメール送信しても届かない問題の解決策 | PisukeCode >https://pisuke-code.com/xammp-php-how-to-send-email/ こちらの、「解決策2.メール送信ライブラリ(PHPMailer)を使う」がお勧めです。 メールサーバには、契約しているインターネットプロバイダの、メール送信サーバー名を指定してください。 もし、マンションインターネット等を利用中で、メール送信サーバが無いならば、無料のYahoo!mail か Gmail(Google)のアカウントを取得すると、メールアドレスとメールサーバが使えるようになります。 Gmailのメールサーバを使うためには、「アプリパスワード」を発行しないと行けなかったりして、こちらも少し面倒なんですけどね。 ↓ PHPMailer + Gmailの例 >【PHPMailer】GmailのSMTP経由でメールを送信する >https://into-the-program.com/phpmailer-gmail/
その他の回答 (2)
- agehage
- ベストアンサー率22% (2752/12072)
このPHPを動かしているマシン(localhost)ではSMTPサーバーが稼働していない、もしくはアクセスできないというエラーです そうなるとSMTPサーバーがどうなっているの?ということになります どうなってます? 設定してあるのか?#1さんの回答にあるように、プロバイダのものを使うのか。 多分この回答の意味が分からないと思います そうなりますとメールサーバーの勉強が必要になってきます メールを送るにはSMTPサーバーというものが必要です 有名なSMTPサーバーはlinuxのpostfixというプログラムです Windowsでもできます なので「試験的なSMTPサーバーを建てたい」という質問をされるといいと思います OSと利用目的を記載して質問してください PHP抜きでメールのやり取りができますと、PHPから送る準備が整ったということです
お礼
ご回答有難うございます。 メールサーバーについての勉強が必要という事ですね。 これは自分にとってはまだ未知の内容なので、これから勉強していこうと思います。
- asciiz
- ベストアンサー率70% (6803/9674)
現代では、迷惑メール・迷惑メール業者対策のため、プログラムからメールを送ることは非常に面倒になっています。 そのことをご承知おきください。 エラーには「SMTP送信ポート(25番)でアクセスしようとしたが、できなかった」と言われています。 その localhost でSMTPサーバは動いているのですか? localhost が自分のパソコンであるならば、きちんと送信できるメールサーバをセットアップしてからそのスクリプトを動かさなければなりません。 localhost がレンタルサーバであるならば、そのサーバでSMTPサーバが動いているのかどうか確認する必要があります。 まあ、メールサーバとして localhost を指定するから大変なのであって、現在あなたが契約しているプロバイダのメールサーバを使うのが良いでしょう。 >SMTP=localhost こちらの行を、プロバイダから指示のある >SMTP=smtp.provider.co.jp みたいなサーバ名にすれば、その他はそのままで動いてくれるかもしれません。 ただ、生のSMTPポート25番によるメール送信は、昨今の迷惑メール事情によりブロックされていることがあります。 その場合、 >smtp_port=587 とすることにより、送信できるかもしれません。 ただしさらに、SMTPポート587番を使用する場合には、TLSによる暗号化通信を要求される場合があります。 そうなると、単純な mail() 関数だけでは送れません。 ---- こちらのように、メール送信を実行する sendmail.exe を導入し、そちらをセットアップしてから、sendmail.exe を呼び出してメールを送るという手段もあります。 (まあ *.exe はwindowsの話ですが) >XAMMP環境でPHPからメール送信しても届かない問題の解決策 | PisukeCode - Web開発まとめ >https://www.glob.com.au/sendmail/
お礼
ご回答ありがとうございました。 自分はまだPHPの学習者で、自身のWebサイトを持っているわけではなく、単にXamppの上で練習スクリプトを作っているだけですので、プロバイダーなどとの契約はありません。 また php.ini でsmtp_port=587 というのも試してみましたが結果は同じでした。 Xampp環境下でのSMTPサーバのセットアップのようなことは可能なのでしょうか? それが可能であるなら、教えていただきたいのですが、無ければ通常の <form> の <textarea> を使ってユーザーからのコメントを受け取るようにスクリプトを変えてみますが。 何かヒントがありましたら、教えてください。お願いします。
お礼
詳しい説明をいただき、有難うございます。 今の自分のPHPレベルでは、SMTPサーバーのような複雑なことは一旦避けておいた方がよいと思いました。たまたま今使っているPHPの教本に mail() 関数のサンプルがあったので、本当にそれでメールを送れるのかと思い試しただけのことでした。他のPHPの組み込み関数を試 すのと同じ感覚でやってみたのですが、自分にとってはかなり敷居の高いものだったことがわかりました。 でもいつかは必ず挑戦してマスターしたいと思っています。少なくとも、ご提示いただいた参考のサイトなどから基本的な情報を読んで、大まかなことだけでも理解したいと思います。