エス技研

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のいずれか。

Google Code Prettifyの設定方法を解説。 Syntax Highlighterから乗換え、高速化にも最適

Google Code Prettifyでソースコードをきれいに編集する方法の解説。簡単設置とカスタマイズ設置の2つの方法を解説し、カスタマイズするポイントも解説。

ob_start、ob_get_contentsを利用しショートコード内でinclude・WordPressプラグイン開発

WordPressのプラグインやショートコードの関数作成でテンプレートをincludeする際に利用するob_start関数、ob_get_contents関数を紹介。

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

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

WordPressの不正ログインを Force email loginで回避

WordPressのセキュリティ強化に Force email loginを使う理由と設定方法の解説をしています。

Multi RatingでWordPressの口コミサイトを構築

口コミの評価点を投稿する機能に特化。評価点を複数設定することができ、投稿後の評価点を編集することができる数少ないプラグイン。日本語にも対応。おススメ。

BackWPupでバックアップ・Jobの設定・保存先の情報設定

BackWPupその3。Jobのバックアップファイルの保存先の設定についての解説。

WordPress 画面が真っ白になる不具合があった場合の対応の一つ

WordPressで画面が真っ白になる不具合があった場合の対応方法の説明です。PHPでエラーが起こっている場合がほとんどですがその対処方法です。

Theme My Loginでメール認証、管理者承認付の会員管理・基本編

会員管理をするプラグインTheme My Loginの解説。メール認証、管理者認証、reCAPTCHAによるいたずら登録を防止し、ログイン攻撃対応のセキュリティも備わっている。

FC2からWordPressに引越でcanonicalとmeta refreshで転送設定

FC2からWordPressに引越する際の転送設定はcanonicalとmeta refreshの設定でユーザへもGoogle検索エンジンにも引越し情報を伝えられます。