以前の記事で書いた通り、PHPでのメール送信はPEAR::Mailをつかっていました。
しかし、最近挙動がおかしいので、sendmailへ切り替えてみました。

概要

php.iniにsendmail.exeのパスを通してsendmail.iniにメール送信サーバの設定を書けば送信できるようになります。
今回はGmailのSMTPサーバを使ってメールを送信してみます。
※C:\xampp に対して設定を行っていきます。各種パスは自分の環境に合わせて読み替えてください。

php.ini 編集

C:\xampp\php\php.ini を下記の通り編集します。

sendmail.ini 編集

C:\xampp\sendmail\sendmail.ini を下記の通り編集します。

smtp_serverにはメール送信サーバを設定します。
今回はGmailのSMTPサーバを使うのでsmtp.gmail.comを設定しました。
また、GmailのSMTPサーバは587ポートを使うのでsmtp_portも変更しました。

force_senderは設定しないと Message is missing sender’s address というエラーが出てメールを送信できないので
忘れずに設定してください。

なお、メールのエラーログは C:\xampp\sendmail\error.log で確認できます。

メール送信

実行するとエラー次のようなエラーが出ます。

[コンソール] sendmail: Error during delivery: <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=XXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXハッシュ値的なものXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX> Please log in via your web brows送信失敗

[C:\xampp\sendmail\error.log] 17/12/11 13:20:55 : <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=XXXXXX<EOL>
XXXXXXXXXXXXXXXXXXXXXXXXXハッシュ値的なものXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Please log in via your web browser and<EOL>then try again.<EOL> Learn more at<EOL> https://support.google.com/mail/answer/78754 z78sm24936154pfk.115 – gsmtp<EOL>

このエラーはGoogleのアカウント設定で「安全性の低いアプリの許可」を有効にすると回避できます。

先ほどメール送信テストをしたことで、sendmail.iniに設定したアドレス宛に 「ブロックされたログインについてご確認ください」 という件名のメールが来ているはずなので、
メールを開き 安全性の低いアプリへのアクセスを許可 をクリックしセキュリティ設定を変更してください。

まとめ

GmailのSMTPサーバを使ってメールを送信する こちらのサイトが非常に参考になりました。
ありがとうございました。