LoginSignup
7
5

More than 3 years have passed since last update.

WordpressのWP Mail SMTPで証明書エラーの回避方法

Posted at

概要

php5.3からphp7.4にバージョンアップしたところ、WordpressプラグインのWP Mail SMTPで以下のエラーが発生したので、その対処についてのメモ。

stream_socket_enable_crypto(): Peer certificate CN=`*.example.com’ did not match

エラー原因

原因はphp5.6からOpenSSLがバージョンアップし、ピア証明書が必須になったため。証明書がないとエラーが発生する。

暗号化されたすべてのクライアントストリームで、ピア検証がデフォルトで有効になりました。 デフォルトでは、OpenSSL のデフォルト CA > バンドルを使ってピア証明書を検証します。 たいていの場合は、正しい SSL 証明書を持つサーバーと通信するならこれを変更する必要> はありません。 OpenSSL が、よく知られた CA バンドルを使うように設定されているからです。

対処方法

対処方法としては、証明書を用意するか、php.iniの変更か、PHPMailerのSMTP Optionsで設定するかのいずれか。
WP Mail SMTPの場合、functions.phpに以下のコードで追加する。

functions.php

// WP Mail SMTPでメール送信元が効かなかったので設定。(証明書エラーとは関係ない)
add_filter( 'wp_mail_from', function() {
    return 'info@gmail.com'; // 送信元メールアドレス
} );

// これ以降が証明書エラーのための設定。
function my_wp_mail_smtp_custom_options ( $phpmailer ) {
    if ( isset( $phpmailer->SMTPAuth ) ) {
        if ( $phpmailer->SMTPAuth == true ) {
            $phpmailer->SMTPOptions = array('ssl' => 
array(
 'verify_peer' => false,
 'verify_peer_name' => false,
 'allow_self_signed' => true));
        }
    }
    return $phpmailer;
}
add_filter("wp_mail_smtp_custom_options", "my_wp_mail_smtp_custom_options");

各オプションの説明は以下の通り。

オプション 説明 初期値
verify_peer SSLサーバー証明書の検証を要求するか否か TRUE
verify_peer_name ピア名の検証を要求するか否か TRUE
allow_self_signed 自己証明の証明書を許可するか否か FALSE

tetsuro.tayama@gmail.com

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5