WordPress Contact Form 7 でのメールが届くのが遅い理由と対策方法

2021年3月7日

eyecatch_706

問題点

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 = 送信元の名前」を追加して使用してください。

オススメ記事

eyecatch_732

.htaccess 特定のホスト、IPの許可と制限…

問題点 WordPressの「wp-admin」ディレクトリ…

eyecatch_578

SEO結果 Google検索のクリック数と平均掲載順位の変動2021/01/01…

2021年1月1日にこのページを開設して約1ヵ月半経過しまし…

eyecatch_432

WordPressでjQueryが動かない原因と対策…

問題点 一般的にjQueryでは、下記のようにコードを記載し…