エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


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のファイルの中のどこかに追記すればいいんですが、ファイルの一番最後に追記する方法が無難でしょう。
 

 
 

WP Mail SMTPのプラグインのファイルを直接修正はダメ

 
前項の解説で、functions.phpに処理を記述しています。
これは、プラグインのファイルを直接メンテナンスをしないための処理です。
 
 
前項で解説した処理は、下記の様に、プラグインのファイルを直接メンテナンスする方法と同じ処理になります。
 
/wp-content/plugins/wp-mail-smtp/wp_mail_smtp.php
の 150行目付近
 

 
この方法であれば、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に連絡をして、連絡をして、連絡をして、対応してもらう、という方法でしょうか。

 - WordPress

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

WordPressプログラム全体で定数や変数を利用する場合の設定方法

WordPressで関数を追加するときなど、全体で同じ変数を使いたいと思う場面の対処方法です。変数を記述する関数はfunctions.php、wp-config.phpのいずれか。

評価点投票プラグイン10個を比較!WordPressで口コミサイトを構築

口コミサイトを作るために必要な評価点、レビューを投稿できるプラグインを探して評価。10プラグインをチェックし、8プラグインは詳細解説付き。

30分でWordPressを引越し・他のサーバに引越しや開発環境の構築手順

WordPressを他のサーバに引っ越しするとき、テスト環境を作るときなどの作業手順をまとめました。プラグインを使う方法もありますが手作業でも簡単です。

WordPressの高速化でSEO対策!広告費も削減!高速化の施策のまとめ

WordPressを高速化するためのまとめ記事。これまで多様な高速化の対応を行ってきましたが、それを具体的に何をすればいいかが一目でわかるようまとめ記事にしました。

WordPressの記事編集で文字が自動変換される要注意な文字列

記事を編集する際、入力した文字とは違う表示のされ方をする文字、アポストロフィ、ダブルクォート、円マーク、三点リーダ(…)など、その解説と対応方法です。

WordPressにプラグインを使わず OGP(Open Graph Protocol)の設定方法解説

WordPressに OGP(Open Graph Protocol)をプラグインを使わずに設定する方法の解説。

WordPressで使うおススメ FTP、テキストエディタ、圧縮解凍ソフト

WordPressサイトを構築、運用するために必要となるFTPソフト、テキストエディタ、圧縮解凍ソフトのオススメソフトを紹介。

WordPressの一覧ページのテンプレートの種類とファイルの設定

ファイル名に従って一覧ページのテンプレートは選択される。ルールに従ってファイル名を付けることで任意のカテゴリ、タクソノミーごとのテンプレートを指定可能。

WordPressのカテゴリやタクソノミーにカスタムフィールド項目を追加する方法

WordPressのカテゴリやタクソノミーに編集する項目を追加する方法の解説。Advanced Custom Fieldsを使うと簡単。テンプレートに記述する方法も解説。

カスタムタクソノミーのターム一覧をウィジェットにショートコードで編集

カスタムタクソノミーに属するターム(カテゴリ)の一覧を wp_list_categories()関数+ショートコードでウィジェットに編集するサンプルプログラムです。