blog
フォームのメールが届かない時に有効!SPFレコードの書き方
Writer
石川 理穂
Sales Engineer Web Developer
こんにちは。エンジニアの石川です。
最近になって、「フォームからのメールが、いつからか届かないみたいなんですが…」という相談をよくいただきます。
納品時にはきちんと飛んでいることを確認したはずのメールフォームが、いつからか飛ばなくなっていたみたい。
困るし、なんで?と思いますよね。
これは、各社サーバがメールを受信する際の、セキュリティが高くなっていることが要因です。
それまでは「セーフ」と判断されていたメールが「アウト」判定になっているんですね。
これを解決するためには、受信サーバに信頼され「セーフ」認定してもらえるよう、飛ばすメールの信頼度を上げてやるのが有効です。
その方法の一つが、今回紹介するSPF(Sender Policy Framework)レコードです!
こんな人は本記事が有効かも?
・フォームのメールがいつからか受信できなくなっていた
・フォームのメールが人によって受信できたりできなかったりしてしまう
・メールサーバを変えたらフォームのメールが受信できなくなってしまった
・Webサーバやドメインを変えたら、送信ロジックを変えていないのにフォームのメールが受信できなくなってしまった
SPFレコードとは?
まずは「SPFレコードって何?」というところをざっくり説明します。
SPFレコードってどういうもの?
→ 形としては、規則に沿った「テキスト」です。拡張子をもったファイルなどではありません。
SPFレコードはどこに記述するもの?
→ ドメインの管理画面の中の、DNS(Domain Name System)設定に、TXT形式で記述するものです。
SPFレコードは何のためのもの?
→ 自分のドメインを名乗ってメールを送信しても良いサーバを宣言するものです。
SPFレコードはいつ、誰が確認しているの?
→ 受信側のメールサーバが、メールを受信する前に送信元(from)のドメインのDNSに設定されている、SPFレコードを確認しています。
①送信サーバがメールを送信 → ②受信サーバが受信する前にメールをチェック → ③安全と判断した場合に受信
この「安全と判断する」の判断材料としてSPFレコードの記述が有効となります。
SPFレコードを記述しよう
SPFレコードの記述先(どのドメインのDNSに記述するのか)
→ これは、メールフォームでfromに設定しているドメインです。
例えば hoge.com のお問い合わせフォームでメールを送信していて、その際fromを「[email protected]」としている場合、
hoge.com のDNS設定に、SPFレコードを追加します。
もうひとつ例で、 hoge.com のお問い合わせフォームでメールを送信していて、その際fromを「[email protected]」としている場合、
この場合は、レコードを追加すべきなのは piyo.com で、お問い合わせフォームを設置している hoge.com ではありません!ややこしいので注意です!
メールを受信するサーバは、受信する前にfromのドメインのDNSレコードを確認しに行きます。
確認先であるfromのドメインのDNSレコードに、「私のドメインを名乗っていいサーバはこれらです」とSFPレコードで記載してあげることで、
受信サーバは「よし、このメールはなりすましではないな!」と判断し、メールを受け入れるわけです。
SPFレコードの設定場所
ドメインを管理しているサービスによって様々ですが、「DNS設定」「ゾーン設定」という項目になっていることが多いです。
お名前.comの管理画面だと、このあたりから入れます。
DNS設定を変更したいドメインを選択して「次へ」で進み、
「DNSレコード設定を利用する」の横の「設定する」ボタンで編集画面に入ります。
こういう画面が出てきたら、いよいよSPFレコードを設定していきます!
SPFレコードは「TXT」というタイプで入力します。
「www」を含めサブドメインがある場合は、ホスト名の空欄に入力をし、「TYPE」のドロップダウンを「TXT」に変更します。
そうするとVALUEの欄が1行になるので、ここにSPFレコードを書きます!
SPFレコードの記述方法
レコードの記述方法はいくつか種類があります。
例えば、IPアドレス 123.45.678.90 というサーバがあって、
hoge.com はこのサーバに「hoge.com」を名乗ることを許可したいとします。
IPアドレスで指定する
“v=spf1 ip4:123.45.678.90 ~all”
→「 IPアドレスが123.45.678.90のサーバを許可します!」
ドメイン(ドメインのAレコード)で指定する
“v=spf1 a:hoge.com ~all”
→「 hoge.comのAレコードに設定されているIPアドレスのサーバを許可します!」
別のドメインのSPFレコードを引用する
“v=spf1 include:other.com ~all”
→「other.comのSPFレコードに設定されているサーバを、hoge.comでも許可します!」
こんな形でどんなふうでも良いのですが、私は「わかりやすい」という理由でAレコードで指定することが多いです。
ちなみに「~all」って何?
末尾の「~all」について補足説明です。
これには「-all」と「~all」の2種類書き方があり、意味が違います。
「-all」→ その他の条件の場合は拒否する
「~all」→ その他の条件の場合は、受信サーバの判断に委ねる
許可したい条件以外での送信では、明確に拒否したい!ということであれば「-all」を指定しましょう。
それ以外の場合は、一般的には「~all」で設定することが多いです。
こんなミスに注意!
許可する条件をつなげて書く場合は、スペースで区切って1行に
許可する条件を複数設定したい場合は、SPFレコードを2つ書くのではなく、スペースで区切って1行にします。
SPFレコードが2つある場合、どちらかが無効になるなどの不具合が起きます。
設定する際に、既にSPFレコードが存在していないか?も確認が必要ですね。
レコードの長さは255字、それ以上になると正常に作動しない場合も
TXTレコードの長さには制限があり、255字以内にする必要があります。
長すぎる場合は書き方を工夫する必要がありますね。
SPFレコード設定時のサポートアイテム
SPFレコードが正しいかどうかをチェックするサイト
この場合の「正しいか」は、やりたいことができているか?ではなく、構文として間違いがないかのチェックです。
構文が間違っていて効果が反映されない…といったミスを防ぐのに便利です!
SPFレコードが反映されているかどうかをチェックするサイト
SPFレコード(TXT)だけではなく、ドメインに設定されているあらゆることを確認できるツールです。
※DNS設定の反映には時間がかかるので、設定後すぐはここでチェックしてもまだ反映されていないという場合が多いです。
ホスト名を入力して「オプション(任意)」を「TXT」にして、「dig実行」をクリック!
そうすると、指定したドメインに設定されているTXT情報が出てきます。
まとめ
SPFレコードの設定は、目に見えなかったり効果が確認しづらかったりする分、デザイナーさんは「ウッ」と感じてしまうところだと思います。
ですが、特にGmailへの自動返信メールの不達に対してはかなり効果があると感じていますので、ぜひお試しください!
「やってみたけど、効果が出ない」「反映できているか分からない」「難し過ぎて分からない」と言う場合は、弊社までお気軽にお問い合わせくださいませ。
(その際は、ドメインのコントロールパネルのログイン情報をお忘れなく!)