LOADING

BLOG

HOME > BLOG > 技術 > PHP > WordPress > 問い合わせフォームでGmailにメールが届かないときはSPFを疑う

問い合わせフォームでGmailにメールが届かないときはSPFを疑う

PHPWordPress技術環境構築

WordPressのContact Form 7のようなお問い合わせフォームでよくある自動応答メール設定。
問い合わせがあると問い合わせた本人や管理者宛に自動でメールが送られる仕組みです。

その自動応答メールで、正常にメールが届かない場合にSPFを確認した方がいいという話です。

SPFとは

前提として、メールには送信元(From)がどのメールアドレスであるかという情報が含まれていますが、この送信元のメールアドレスは容易に書き換えることが可能です。

まずSPFについて簡単に説明すると、メールの送信元のドメインが偽装されていないか、なりすましでないかを検査するための仕組みです。

そのためFromが「hogehoge@example.com」のメールを受け取ったとしても、本当に「hogehoge@example.com」本人から送信されたメールなのかを、メール単体で判断することは難しく、他者のなりすましである可能性があります。

そこで、SPFがなりすましを防ぐための仕組みとしてはDNSを使用します。
送信側がドメインのDNSにSPFレコードと呼ばれる情報を設定しておくことで、受信側がメールを受け取った際に正規の送信元であるかを検査することができます。

SPFレコードとは

SPFの設定にはDNSのTXTレコードを使用します。
SPFの設定のために、TXTレコードに登録する情報をSPFレコードと言います。

設定例として以下にXSEVERのマニュアルを引用します。

DNSレコードへのSPF設定

2.DNSレコードの設定

v=spf1 +a:sv***.xserver.jp +a:example.com +mx include:spf.sender.xserver.jp ~all

「内容」について

sv***.xserver.jp」の部分は、お客様がご利用のサーバーのホスト名を記入してください。
example.com」の部分は、お客様のドメイン名を記入してください。

https://www.xserver.ne.jp/manual/man_domain_dns_setting.php

このXSERVERの設定例では、「sv***.xserver.jp」もしくは「example.com」というホストから送信された該当ドメインのメールは正規のメールであるという設定をしています。
また、それ以外のメールは不正メールとして扱うよう設定されています。

上記のような設定を行っている場合、SPFで指定したホスト以外のサーバからメールを送られると受信側で不正メールとして扱われ拒否される可能性が高くなります。

例えばXSERVERをメールサーバとしてだけ使用し、同ドメインで別サーバにWEBサーバを立てたとします。
そしてWEBサーバにあるWordPressからメールを送信してしまうと、SPFで指定したホストと異なるサーバから送信されていることになるため、受信者側で拒否されます。

Gmailについて

特に受信者側がGmailである場合、拒否される可能性が非常に高くなります。

以下のGoogle Workspace 管理者ヘルプにある「お問い合わせフォームに関するGmailの事象のトラブルシューティング」によると、SPFでの認証に不正がある場合、迷惑メールに分類または拒否されると明言されています。

Gmail では、お問い合わせフォームのメールが迷惑メールに分類されたり、拒否されたりすることがあります。この問題の根本原因は、多くの場合、お問い合わせフォーム プロバイダによるメールの認証方法にあります。お問い合わせフォームのメッセージは通常、SPF または SMTP リレーで認証されます。

https://support.google.com/a/answer/11966003

拒否された場合は迷惑メールフォルダにも届かずに、受信者にはメールが送られてきたことすらわからなくなってしまいます。

まとめ

お問い合わせフォームのテスト時に、どうしてもメールが届かない場合は、SPFを疑ってみた方がいいかもしれません。

設定早見表

SPFレコードはテキスト1行で設定します。
テキストは厳密に文法が定められており、誤った書式では正常に認証が動作しません。
最後に、よくある記述例と設定方法を掲載します。

v=spf1 +ip4:255.255.255.255 +a:example.com include:_spf.example.com ~all 
v=spf1SPFのバージョン指定
+ip4:〇〇〇〇で指定したIPアドレスを正常なメールとして処理する
(+は付けても付けなくても動作する)
+a:○○〇〇で指定したドメインのAレコードのIPアドレスを正常なメールとして処理する
(+は付けても付けなくても動作する)
include:○○○○で指定したSFPレコードを参照する
~○○○○で指定した送信元は不正として警戒する
(最後に~allと付けることが多い)
-○○○○で指定した送信元は不正として拒否する
(最後に-allと付けることが多い)