WordPress Contact Form 7 でのメールが届くのが遅い理由と対策方法
問題点
WordPressのお問い合わせフォーム「Contact Form 7」でのメールが届くまでに、30分や1時間など時間がかかるときがある。他のプラグイン「Snow Monkey Forms」でも同様にメールが届くまでに時間がかかるときがある。
原因を調査
WordPressのお問い合わせフォームのメールは通常、wp_mail() 関数が使われます。wp_mail() 関数は、ざっくりどういう機能かというと、良い感じに他との調整をしてメールを送信してくれるWordPress内の関数となります。この関数自体は、PHPのPHPMailerというライブラリーを使用していて、サーバーアプリケーションなどでよく使われるメール機能のsendmailを調整して使用します。
先ほどから記載している調整というのが曲者で、レンタルサーバーの場合は、通常他の人の処理が動いていますし、専用サーバーでも多くの処理が動いていることがあります。そういうプロセス処理を都合付けて順番にしていくのですが、メール送る処理の順番も同じように調整されます。ここで、メールが届くのが遅いときと早いときがあるのは、処理待ちの順番がないときは早いですし、順番待ちが長いときは遅くなります。この辺りは、サーバーの設定次第となり、優先度などでも変わりますが、基本的には、管理者ではないと設定変更はできません。レンタルサーバーの場合は、特にこの順番待ちが長くなります。
対策方法
原因に記載した通り、メール送信の処理待ちで遅くなっております。対策としては、この順番待ちをせずに他の処理からメールを出してしまえば、すぐに処理されます。
回避には、SMTPのメールサーバーに直接接続してしまえば回避できます。(パソコンなどでメールを送るときと同じ方法をWordPressでもするわけです。)
add_action( 'phpmailer_init', function( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'メールサーバーのホスト名'; // メールサーバーのホスト名
$phpmailer->Port = 465; // 接続ポートは接続方法で異なる(25 or 465 or 587)
$phpmailer->Username = '接続ID'; // 接続ID(一般的にはメールアドレスが多い)
$phpmailer->Password = '*****************'; // パスワード(平文で記載されるのでセキュリティー面は微妙)
$phpmailer->SMTPSecure = 'ssl'; // SMTP暗号化方法(587:tls / 465:ssl など)
} );
WordPressのテーマ、可能なら子テーマのfunction.phpに上記のコードを登録する。wp_mail() 関数で処理中にphpmailer_initが使われているので、そこにフックをかけて、SMTPメールサーバーに接続してメールを送信に差し替えてしまいます。
必要に応じて、送信元のメールアドレス「$phpmailer->From =送信元メールアドレス」や「$phpmailer->FromName = 送信元の名前」を追加して使用してください。
オススメ記事
開設1ヵ月 ConoHa WING Pagespeed Insights 速度 …
前回計測からの変更点 前回は、Google Adsenseの…
inputタグのCSSに「:focus」を使用時に出る青色の枠を消す方法…
問題点 HTMLのinputタグのCSSに「:focus」を…
WordPress プラグイン 英語で表示された場合の解決方法…
問題点 日本語対応のWordPressのプラグインでアップデ…
ディスカッション
コメント一覧
まだ、コメントがありません