突然、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のバージョンアップによる問題でした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする