以前の記事で書いた通り、PHPでのメール送信はPEAR::Mailをつかっていました。
しかし、最近挙動がおかしいので、sendmailへ切り替えてみました。
概要
php.iniにsendmail.exeのパスを通してsendmail.iniにメール送信サーバの設定を書けば送信できるようになります。
今回はGmailのSMTPサーバを使ってメールを送信してみます。
※C:\xampp に対して設定を行っていきます。各種パスは自分の環境に合わせて読み替えてください。
php.ini 編集
C:\xampp\php\php.ini を下記の通り編集します。
1
2
3
|
;sendmail_path =
↓
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"
|
sendmail.ini 編集
C:\xampp\sendmail\sendmail.ini を下記の通り編集します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
smtp_server=mail.mydomain.com
↓
smtp_server=smtp.gmail.com
smtp_port=25
↓
smtp_port=587
auth_username=
auth_password=
↓
auth_username=XXXXXXXXXX@gmail.com
auth_password=Googleのパスワード
force_sender=
↓
force_sender=XXXXXXXXXX@gmail.com
|
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 で確認できます。
メール送信
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
$to = 'xxxxxxxxxx@gmail.com';
$subject = '件名';
$body = "本文\n改行テスト";
//日本語のメールを送信するのでmb_send_mail()を使う。
if (mb_send_mail($to, $subject, $body)) {
echo '成功';
} else {
echo '失敗';
}
?>
|
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サーバを使ってメールを送信する こちらのサイトが非常に参考になりました。
ありがとうございました。