WP Mail SMTPはPHP5.6、7.0系ではメール送信時にエラーが発生。その対処方法。
2017/06/04
WP Mail SMTPはPHP5.6、7.0系ではメール送信時にエラーが発生
X Serverで PHPを 7.0にアップすると WP Mail SMTPでメールが送信できなくなった
「月極駐車場検索エース」のサイトは、WordPressで構築していまして、メールの送信には、メール送信プラグイン「WP Mail SMTP」を使っていました。
そして、2016年の年末にこのブログも含めて SSL化の対応を行いましたが、その際に PHPのバージョンを 7.0系にアップデートする対応をしていました。
X Serverでは、PHPのバージョンを変更することが非常に簡単に実行することができます。
で、PHP 7.0にアップしたところ、メールが送信されなくなるというエラーが発生しました。
これは、PHP 5.6から OPEN SSLに関するアップデートがあったために、ピア証明書が正しく設定されていないサーバからメールを送信する際にエラーとなり、SMTP経由でメールが送信できなくなる、という不具合でした。
詳細は、最後に書いていますので合わせて参考にしてみてください。
というわけで、この不具合を回避する方法を紹介します。
functions.phpに不具合回避の処理を追加する
PHPのバージョンが 5.6以上(7.0系を含む)になると、OPEN SSLのピア証明書を検証する処理がデフォルトで有効になりましたので、ピア証明書が正しくない場合にエラーとなり、メールが送信できなくなる、という問題でした。
そのための対処方法として、PHP 5.5までと同じように、「ピア証明書の検証をしない」という処理に戻す方法を採ります。
具体的には、下記を functions.phpに編集します。
functions.phpのある場所は、下記になります。
/{WordPressのインストール場所}/wp-content/themes/{テーマ名}/functions.php
functions.phpのある場所についての詳細は、「WordPressの functions.phpがある場所」に解説をしていますので合わせて参考にしてください。
functions.phpのファイルの中のどこかに追記すればいいんですが、ファイルの一番最後に追記する方法が無難でしょう。
1 2 3 4 5 6 7 8 9 |
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"); |
WP Mail SMTPのプラグインのファイルを直接修正はダメ
前項の解説で、functions.phpに処理を記述しています。
これは、プラグインのファイルを直接メンテナンスをしないための処理です。
前項で解説した処理は、下記の様に、プラグインのファイルを直接メンテナンスする方法と同じ処理になります。
/wp-content/plugins/wp-mail-smtp/wp_mail_smtp.php
の 150行目付近
1 2 3 4 5 6 7 |
// If we're using smtp auth, set the username & password if (get_option('smtp_auth') == "true") { $phpmailer->SMTPAuth = TRUE; $phpmailer->Username = get_option('smtp_user'); $phpmailer->Password = get_option('smtp_pass'); $phpmailer->SMTPOptions = array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true)); } |
この方法であれば、6行目の 1行を追加するだけで対応が可能です。
そのため、この方が一見簡単に見えますが、プラグインのアップデートが行われた場合は、修正したファイルは更新されてしまいますので、その都度修正をやり直す必要が発生します。(プラグインをアップデートすると、プラグインフォルダの中身は、「削除→新規追加」の処理が実行されるため、プラグインフォルダの中身は全く別物になります。)
そのため、プラグインのファイルを直接メンテナンスしてしまうと、プラグインのアップデートを気軽にできなくなりますので、避けるべき対応方法です。
「SMTP Mailer」というプラグインを使う
これまで解説した方法は、functions.php、もしくは、wp_mail_smtp.phpのファイルに対して、プログラムの改修を行う、というものです。
私はエンジニアですので、プログラムを触ることに抵抗はありませんが、なるべくならプログラムに触らずに何とかしたい、という方もいるでしょう。
ということで、サクッと新しいプラグインを導入するという方法もありますので、ご紹介します。
「SMTP Mailer」というプラグインを使う方法です。
「WP Mail SMTP」を「停止」させて、「SMTP Mailer」というプラグインをインストールして、利用します。
詳細な利用方法については、「SMTP Mailerでスパム判定回避。WP Mail SMTPで発生する送信エラーも対応」に解説記事を書きましたので、そちらを参考にしてください。
「SMTP Mailer」の設定のポイントは、「Disable SSL Certificate Verification」にはチェックを入れるようにする、というところですね。
WP Mail SMTPで PHP 5.6、7.0にするとエラーが出る理由を詳細解説
PHPが 5.6にバージョンアップする際、OPEN SSLに関する処理に変更がありました。
その変更とは、「ピア証明書」を検証する「ピア検証」が、デフォルトで有効になりました。
それによって、「ピア証明書」が正しくないサーバを利用していた場合は、PHPのバージョンを 5.6(7.0系を含む)にバージョンアップすることで、SMTPサーバへの接続がエラーとなり、SMTPサーバ経由でメールを送信する処理がエラーになるようになりました。
つまりは、「WP Mail SMTP」プラグインを使って、SMTPサーバ経由で送信していたメールがエラーになるようになった、というわけです。
「ピア証明書」は、通信相手から受け取った相手側の証明書で、この証明書を使って通信相手の身元を確認したり、暗号化のための公開キーを入手することができます。
また、「ピア証明書」の別名を「対向マシンのX.509v3証明書」といいます。
「X.509」は、電気通信標準化部門(ITU-T)が規定する公開鍵基盤(PKI)の規格で、公開鍵証明書の標準形式や、証明書パス検証アルゴリズムなどを定めています。
その規格のバージョン 3が、「X.509v3証明書」です。
ざっくり説明すると、SSLの認証には複数の手順で実現されていますが、その一つ一つにチェックする仕組みがあるわけですが、その一つが「ピア証明書」を検証する「ピア検証」で、PHP 5.6からはその「ピア検証」がデフォルトで有効になりました。
ということです。
ということですので、対処方法としては、下記のようなものがあります。
・ピア認証を無効にする
・ピア認証の対処がされているプラグインを利用する
・PHPのバージョンを 5.5以下にする
3項目目は、選択肢としてとりえないので解説はしません。
理由は、すでに PHP 5.5以下は推奨されないバージョンであるためです。
また、本来の対応方法としては、正しいピア証明書を使っている SMTPサーバを利用する、という方法なわけですが、利用しているレンタルサーバ(私の場合は X serverですが)が正しく実装されていないのだとすると、ユーザ側では対処療法で対処するしかないわけです。
あとは、X serverに連絡をして、連絡をして、連絡をして、対応してもらう、という方法でしょうか。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
WordPressのおすすめの確認画面付きお問い合わせフォームプラグイン・MW WP Form
MW WP Formは確認画面が付いているオススメのフォームプラグインです。企業サイトを CMSとして構築する際にも利用できる実力派です。
-
-
CSV Importerで WordPressにcsvを取込む
WordPressに csvファイルを取り込む CSV Importerの使い方の解説です。
-
-
WordPress データベースを管理するための強い味方のプラグイン WP-DBMANAGER
データベースを管理するための強い見方のプラグイン「WP-DBMANAGER」の使い方の説明です。
-
-
WordPress csvインポート、エクスポートのプラグイン
WordPressから csvファイルをエクスポート、インポートする方法を紹介しています。
-
-
Custom Post Type UIでカスタム投稿を設定・バージョン1.4対応解説
カスタム投稿をプラグインCustom Post Type UIを使って設定する方法を解説。バージョンアップにより設定する項目も増え、より柔軟な設定ができます。
-
-
アクセス5倍増!FC2、seesaaからWordPressに引越結果をレポート
FC2、seesaaからWordPressに引越しでアクセス数がどう変わるかのレポート。canonical、meta refresh設定とWordPressの集客力の検証しています。
-
-
WordPressの一般設定 投稿設定 表示設定 ディスカッション メディア
基本的な設定を行う「設定」の解説です。ブログサイトを構築する際に必要な設定内容を一般設定、投稿設定、表示設定などの各項目を説明しながら設定内容を提示しています。
-
-
Autoptimizeで簡単設定!HTML、JS、cssを圧縮しWordPress高速化!
Autoptimizeを使って簡単にHTML、JavaScript、CSSを圧縮しサイトの表示を高速化しよう!基本設定、拡張設定とあり柔軟な設定で多彩な環境に対応出来ます。
-
-
WordPressの管理画面と公開画面を別のドメインに分離して運用する方法
管理画面と公開画面のURLを違うドメインで設定・運用する方法を解説。管理画面と公開画面の場所を分離することでセキュリティ面でのメリットが大きくなります。
-
-
Advanced custom Fieldsのフィールドグループを簡単に複製する方法
Advanced custom Fieldsのフィールドグループの複製の方法の解説。XMLのExport、インポートする機能を利用して複製します。
Comment
こちらの記事でSMTPのメールテストに成功しました!
ありがとうございます!
下記のようなスペックで動作確認しました。
WordPress 5.3.15
PHP 7.2.12
masakichi さん、コメントありがとうございます。
記事自体も古いですが、WordPressのバージョンもかなり変わってしまっていますが、無事に動作したと言うことで良かったです!