WordPressの「Contact Form 7」などのプラグインで、設定をしているが、メールが届かない!
という場合があります。
特に、宛先が、Gmailの場合が多いように感じます。
これは、メール送信時の「envelope from」をきちんと設定すると、Gmailに届くと思います。
メール到達のための解決方法
新たにプラグインを入れる方法もありますが、ここでは、「functions.php」に処理を加える方法を書きます。
add_action('phpmailer_init', function($phpmailer){ $phpmailer->SMTPKeepAlive = true; $phpmailer->Sender = '(実在するメールアドレス)'; });
↑上記の4行を追加します。
「実在するメールアドレス」には、管理者のドメイン、もしくは、管理者のメールアドレスを設定します。
設定をしない場合
設定をしない場合のメールログを見てみます。
postfix/qmgr[10550]: XXXXXXXXXXX: from=<動作ユーザ@ホスト名>, size=801, nrcpt=1 (queue active) postfix/smtp[17445]: XXXXXXXXXXX: to=<管理者へ>, relay=XXXXXXXXXXX:25, delay=0.32, delays=0.02/0.02/0.06/0.21, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as XXXXXXXXXXX) postfix/qmgr[10550]: XXXXXXXXXXX: removed
上記のように動作します。
ここで、重要なのは、「from=<動作ユーザ@ホスト名>」です。
www-data@server1
とか、になることもあります。
この「from(差出人)」は、システム上の差出人で、「envelope from」と呼ばれています。
Gmailに送る場合、Gmail側から見ると、この「envelope from」が通知されます。
「www-data@server1 からですよ」とGmail側に来ますが、Gmail側からすれば、「誰ですか?」となります。
実在する、「info@実在ドメイン名」なら、「あー、このドメインの方ね」とわかります。
上記の「www-data@server1」では、わかりません。
このため、Gmail側では、「迷惑メールだー」「スパムだー」となって、受け取ってくれません。
設定をした場合
「functions.php」に
add_action('phpmailer_init', function($phpmailer){ $phpmailer->SMTPKeepAlive = true; $phpmailer->Sender = '(実在するメールアドレス)'; });
をした場合
postfix/qmgr[10550]: XXXXXXXXXXX: from=<(実在するメールアドレス)>, size=801, nrcpt=1 (queue active) postfix/smtp[17445]: XXXXXXXXXXX: to=<管理者へ>, relay=XXXXXXXXXXX:25, delay=0.78, delays=0/0/0.03/0.74, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as XXXXXXXXXXX) postfix/qmgr[10550]: XXXXXXXXXXX: removed
と、「from」が、「functions.php」で指定をした、「実在するメールアドレス」になります。
これにより、迷惑メール(スパム)と疑われる事が少なくなります。
この「from」は、システム上の差出人であり、
メールソフト側から、みた、差出人は、
「Contact Form 7」で設定をした差出人となります。