XAMMP環境でPHPからメール送信しても届かない問題の解決策

XAMPPを使ってローカル環境でWebアプリを開発している時、ある問題に遭遇しました。

それはPHPから mb_send_mail などを使ってメール送信できないという問題

例えば次のようなコードを書いた場合、常に false  ( = 失敗)が返ってきます。

「メール送信のテストができないのは困ったな~」と思い、試行錯誤している内にこの問題を解決できる2つの方法を見つけました。

ここでは自分への忘備録も兼ね、メール送信できないときの解決策をまとめようと思います。

解決策1.XAMPPのメール設定を変更する

まず1つめの解決策は XAMPPのメール送信の設定を変更する こと

自分が実際に試した手順は次の通りです。

1.php.iniのメール機能設定を編集

まず初めに php.ini  を開いてメール設定を変更しましょう。

XAMPPコントロールパネルからなら「Apache」ー>「Config」ー>「php.ini」をクリックすれば開けます。

もしWindows環境なら C:\xampp:\php\php.ini に直接アクセスして開いても可です。

 

そして php.ini を開いたらエディタで「mail function」で検索

すると [mail function]  から始まるメール設定が書かれた箇所が見つかるので、次のように書き換え(ハイライトした部分が変更箇所)

まず SMTP  と smtp_port  が有効になっているならコメントアウトし、 sendmail_path  にsendmail.exeのあるファイルパスを指定すればOKです。

ちなみにXAMPPに sendmail.exe がない場合は次からダウンロード可

URL : https://www.glob.com.au/sendmail/

上のサイトから sendmail.zip をダウンロード・解凍し、xamppのインストール先の一番上にフォルダごと貼り付ければOKです。そのまま使えます。

2.sendmail.iniにメール送信元情報を追加

そうしたら次に sendmail.ini を編集していきます。

これは C:\xampp\sendmai 以下にあるので適当なエディタで開けばOK

 

開いたら sendmail.ini にテスト送信で使いたいメルアドを設定します。

その書き方をテンプレートで示すとするなら次のような感じ(【】内は各自の設定で置き換え)

まず smtp_server  にサーバーのホスト名を設定。これはGmailを使うなら smtp.gmail.com  、Yahooメールを使うなら smtp.mail.yahoo.co.jp  のようになります。

次に smtp_port  から適切なポート番号を指定

そして最後に auth_username  と auth_password  にメルアドとそのパスワードを設定すれば完了

ちなみに force_sender  にも念のためにメルアドを設定しておくと良いみたいです。

一応 Gメール と Yahooメールを使う場合の設定例を載せておくと次の通り

Gメールを送信元に使う場合の sendmail.ini の書き方

例えば次が送信元に hoge@gmail.com  というGメールを使う場合の sendmail.ini の書き方

SMTPサーバーに smtp.gamil.com  を使う場合はポート番号 587  を使う必要があります。(詳しくは公式マニュアルを参照)

あとはメルアドとパスワードを設定するだけ・・・なんですが実はGメールはセキュリティ上の理由でそのままのパスワードは使用不可です。

なので予め使用するGメールアドレスで二段階認証を有効にし、アプリパスワードを作成しておきましょう。詳しい作り方については次記事が参考になるはずです。

参考記事 : https://oxynotes.com/?p=5970

Gメールをメール送信テスト用に使うのは結構面倒ですね・・・

Yahooメールを送信元に使う場合の sendmail.ini の書き方

例えば次が送信元メルアドに hoge@yahoo.co.jp  を使う場合の sendmail.ini の書き方

SMTPサーバー smtp.mail.yahoo.co.jp  を使う場合、ポート番号は 587  になります。

また auth_username  にはメルアド全体でなく、ユーザー名だけでOKです。(この例だと hoge  のみ)

3.最後にXAMPPのapacheを再起動

ここまでの設定ができたらXAMPPコントロールパネルから「Apache」を再起動します。

▼「Apache」の横にある Stopボタン を押して再度 Startボタン を押せばおk
php.ini と sendmail.ini を編集し終わったらapacheだけを再起動

これでPHPからメール送信元として設定したメルアドから送信したメールが届くようになるはずです。

解決策2.メール送信ライブラリ(PHPMailer)を使う

もし上の手順を試してもメール送信でエラーが出て送れない・・・

そういう場合には メール送信用のライブラリを使う 、という手もあります。

PHPなら PHPMailer というライブラリが便利ですね。その導入手順と使い方は次の通りです。

 

まず次の GitHubページにアクセスし、PHPMailer をダウンロード

https://github.com/PHPMailer/PHPMailer

ダウンロードして解凍したら src という名前のディレクトリがあります。それをライブラリディレクトリなどにコピペして配置すればすぐに使用可能です。

 

例えば次がPHPMailerを使った簡単なメール送信のテストをしているコード例

上の例では送信元アドレスを tester@yahoo.co.jp  、送信先アドレスを example.@example.com  にして送信テストを行っています。

SMTPサーバーとかポート番号の設定などは先ほどの sendmail.ini の内容に合わせれば問題ありません。

 

あと送信に失敗すると $mailer->ErrorInfo  から詳細なエラー内容が確認できるのも便利ですね。

もし php.ini とか sendmail.ini をゴチャゴチャ編集したくない、という場合はPHPMailerなどのライブラリを使う方が楽だと思います。

XAMPP関連なら次の記事も役に立つかも

こういう風にXAMPPを使ってると結構頻繁に問題にぶち当たります。

なので、これ以外のトラブルやエラーについても次記事で色々まとめてみました。

100%解決できるとは限らないですが、手助けにはなるかもしれません。良ければご覧ください。

 

また本当に解決できないときは テラテイル(teratail)Stack Overflow などで質問するのが最終手段です。

万策を尽くしてもダメだったときはそういう質問サイトを使うと貴重な時間を浪費しなくてすみます。(もちろん回答者の方も時間を使っているので、お礼を言うのも忘れずに!)

ここまでのまとめ

ということでXAMPP環境でメール送信できないときの解決策まとめ

  • XAMPP設定を見直す
    先で紹介したように php.ini から sendmail.exe へのパス、sendmail.ini で送信先メルアドの設定をしてあげればOK。ただし手順が少し(かなり?)面倒
  • メール送信ライブラリを使う
    個人的に使いやすいと思ったのは PHPMailer というライブラリ。エラー内容とかも細かく分かるのでこっちを使う方が便利かも

基本的にはこのどちらかを試せばメール送信できるようになるはずです。

以上、XAMPPでPHPからメール送信できない場合の対処法についてでした。ではでは($・・)/~~~

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください