自分記念日というウェブサービス兼アプリを公開しているのですが、ある日を境に通知のメールが届かなくなりました。
メール送信と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のバージョンアップによる問題でした。
ホームページの制作(デザイン・コーディング・プログラミング)に加え、ネットショップの販売促進に関するアドバイスも致します。 20年以上に渡って実際にネットショップを運営した経験を生かし、聞きかじりではない実績を伴ったノウハウを、自分の言葉でお伝えいたします。 プログラミングの経験は30年以上。HTML、CSS、JavaScript、TypeScript、Vue、NuxtJS、Node.js、MySQL、MongoDB、Elasticsearch、WordPress、PHP、Docker、Electronなど、幅広く対応します。
コメント