All posts
突然、PHPMailerからメールが送信できなくなって困ったの巻

自分記念日というウェブサービス兼アプリを公開しているのですが、ある日を境に通知のメールが届かなくなりました。
メール送信とPush通知は同じスクリプトで配信してるのですが、Push通知はちゃんと来ているので、cronが動いていないわけではない。
とすると、メール送信の部分で何か状況が変わってしまったということかな。たぶんメールサーバー側で何か変更があったのだろう。
メールはPHPMailerを使って送信しているので、まずは細かくエラーを取得できるようにプログラムを書き替える。とりあえず、デバッグレベルを3にして様子を見る。
$mail->SMTPDebug = 3;するとこんなエラーを吐いているのが見て取れました。
SSL routines:ssl3_get_server_certificate:certificate verify failed
この情報を元に調べてみたところ、PHP5.6からSSLコンテキストオプションのverify_peerのデフォルト値がtrueに変更になったことが原因らしい。SMTPをSSL接続する際に、ローカルに置いた証明書と照合するみたいなんだけど、SMTPの証明書なんか持ってるはずもなく。
なので、そのオプションを元に戻してやります。
$mail->SMTPOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
];これでテスト送信してみたところ、無事に送信できました。
SMTP側の仕様変更ではなく、PHPのバージョンアップによる問題でした。




Discussion