2020年9月21日月曜日

PHPMailerでConnection failed. Error #2(PHP5.6)

メチャクチャ久しぶりの開発系の投稿が、既にえ・・・PHP5.6?何これカセキ?と言われそうな情報の古さですがそこの問題は置いておきます。
PHPMailerでエラーが出た話です。

現在PHPMailerのgithub最新はPHP7対応なので5.6で使いたい人は旧版(PHPMailer 5.2-stable)をダウンロードしましょう。
特段苦労もせずlocalhostからすんなりメール送信できたのに開発用サーバで動作確認すると送信できない。なんでじゃー。SMTPサーバはAmazon SES。
とにかくデバッグレベルを上げてログを表示すると下記のエラー。 

Connection failed. Error #2: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed [/xxx/PHPMailer/class.smtp.php line 375]

このあたりの記事でアタリをつけて

そのあと理由を探します

どうも開発用サーバがSSLではない(これもカセキ?と言われそうな・・・)のが原因のようです。オレオレ証明書ですらないので。でもなぜlocalhostはいいのだろう?
結局コードに下記を追加することで送れました。

$mail->SMTPOptions = array(
'ssl' => array(
           'verify_peer' => false,
           'verify_peer_name' => false,
       )
);

アタリをつけてから解決まで30分くらいだった。先人たちの記録にはいつも助けてもらっています。ありがとうございます。
ちなみにAmazon SESの公式は既にPHPMailer旧版のサンプルコードなんてないから要注意です。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。