www.ni4.jp

Gmailにメールが届かないときは、SPFレコードをDNSに登録しよう

ども、どもども。
札幌のウェブサイト制作会社 ジャクスタポジション 西山です。
先日リニューアルしたウェブサイト、さり気なく宣伝してみました。

さて、2022年の3月〜4月頃から、以下のようなご相談をいただくことが増えました。
Googleなどで検索してみても、多くの方が同じような状況になっており、対応策もいろいろと案内されています。

  • 独自ドメインを使用したメールアドレスから、Gmail宛にメールが送れなくなった
  • Gmail宛に届いたメールに「ご注意ください」や「問題がある」と警告が表示されている
  • メールフォームやショッピングカートなどのプログラムから、Gmail宛にメールが送れなくなった

先日も同じようなご相談があったので、私が実施した対応を、自身の備忘録としてまとめておこうと思います。

Table of Contents

今回の前提条件

今回は、「ウェブサイトとメールは同じ独自ドメインを使用しているが、ウェブサーバーとメールサーバーは異なるものを使用している」という前提条件になります。

ウェブサイトのドメイン(ウェブサーバー) example.com
ウェブサーバーのIPアドレス 198.51.100.1
メールサーバーのドメイン(メールサーバー) example.co.jp

上記の内容で、以下のようにDNSレコードを設定しているものとします。

ホスト名 TYPE VALUE 優先
example.com A 198.51.100.1  
example.com MX example.co.jp 10

Gmailで受信したメールに「ご注意ください」「問題がある」と表示される

2022年3月頃から、独自ドメインを使用したメール(例: info@example.com )からGmail宛にメールを送った際、以下のような警告が表示されるようになりました。

このメールにはご注意ください
Gmail では、このメールが本当に info@example.com から送信されたものであることを確認できませんでした。メールに含まれるリンクのクリックや添付ファイルのダウンロード、または返信に個人情報を記載することは避けてください。
迷惑メールとして報告 | フィッシングを報告

ちょうどこの頃、Gmail側で迷惑メールやフィッシングメールへの対策が強化され、独自ドメインを使用したメールの場合、そのメール送信元サーバーが認証・証明されていないと上記のような警告文が入るようになったようです。

認証や証明と言われても…となりますが、つまり info@example.com が送り主になっているメールが、メールサーバーの example.co.jp を利用して送信されていることを、Gmailが確認できれば上記のような警告文は入らない、ということになります。
送信元アドレスのドメインと、送信元サーバーのドメインが異なっているけど、大丈夫?という確認の意味ですね。

送信元サーバーが正しいという情報をDNSに追加する「SPFレコード」

そこで登場するのがSPFレコードです。
SPFレコードとは、「このドメインからメール送信を許可されているのはどういったサーバなのか」を記載したもので、例えばGmailが「example.comのアドレスから送信されたメールは、example.co.jpのサーバーを利用することを許可している」と確認できれば、先ほどのような警告文が表示されなくなるわけです。

今回の例でいうと、以下のようにDNSレコードを登録することになります。

ホスト名 TYPE VALUE 優先
example.com A 198.51.100.1  
example.com MX example.co.jp 10
example.com TXT v=spf1 a:example.co.jp  ~all  

SPFレコードの書き方は、以下にも詳しく記載されています。

これでGmailが「example.comのアドレスから送信されたメールは、example.co.jpのサーバーを利用することを許可している」と確認できるようになりました。

サーバー上のプログラムからGmail宛にメールを送信できない

先ほどの設定では、example.comドメインを使用して、メールサーバー example.co.jp からメールを送信する場合には有効ですが、ウェブサーバーからメールを送信した際に、Gmailから以下のようなメッセージが届き、Gmailにメールが届かない場合があります。

550-5.7.26 This message does not pass authentication checks (SPF and DKIM both 550-5.7.26 do not pass).
SPF check for [example.com] does notpass with 550-5.7.26 ip: [198.51.100.1].
To best protect our users from spam, the 550-5.7.26 message has been blocked.
Please visit 550-5.7.26 https://support.google.com/mail/answer/81126#authentication for more 550-5.7.26 information.

これは独自ドメインを設定しているウェブサーバー( IPアドレス: 198.51.100.1 )が、SPFレコードで送信を許可しているリストに含まれていないことが原因になります。

ウェブサーバーをSPFレコードの許可リストに追加する

そこで、先ほどのSPFレコードを編集して、ウェブサーバーのIPアドレスを追加します。

ホスト名 TYPE VALUE 優先
example.com A 198.51.100.1  
example.com MX example.co.jp 10
example.com TXT v=spf1 a:example.co.jp ip4:198.51.100.1 ~all  

最初、ホスト名( example.co.jp )とIPアドレス( 198.51.100.1 )を併記するにはどうしたら良いのかと悩みましたが、SPFレコードを複数登録するのではなく、SPFレコードの中に複数指定するのが正しいと、先ほど紹介した記事で知りました。

ひとつのドメインに対して複数行の設定がある
SPFレコードは1つのドメインに対して1行になるように記載します。
したがって、複数行にわたる記載はエラーになります。
https://baremail.jp/blog/2020/02/28/579/

これで、ウェブサーバー上のメールフォームやショッピングカートからメールを送信する際も、GmailがSPFレコードを確認し正常に届くようになります。

SPFレコードが正しく設定されているかをチェックする

最後に設定したSPFレコードが正しいかを確認します。
確認するには、オンラインツールを使用する方法、Gmailのソースで確認する方法などがありますが、今回はオンラインツールを利用して確認しました。

https://www.kitterman.com/spf/validate.html にアクセスして、確認したいドメインを入力し、「Get SPF Record」をクリックすると、チェック結果が表示されます。

誤っている場合

No valid SPF record found. と表示されます。
(その他、エラーの内容にあわせて表示されるようです)

正しい場合

SPF record passed validation test with pySPF (Python SPF library)! と表示されます。

やることが増えて大変だけれど…

独自ドメインを取得すると、毎日何百通もスパムメール(迷惑メールやフィッシングメール)が届くようになり、正直なところとても困ります。
Gmailを利用している人にとって、このスパム対策はとても助かるもので正しい対応と思いますが、独自ドメインを使用してメールを運用している人、特にウェブサイトやECサイトを運営している方にとっては、悩ましいものです(汗)

今回のSPFレコード設定はドメインの所有や利用を証明するためのものですし、覚えてしまえばそこまで大変なものではないので、独自ドメインでウェブサイトやオンラインショップを運営している方は、対応しておくと良いと思います!

にしやま やすふみ

札幌のウェブサイト・ホームページ制作会社 ジャクスタポジションで、代表とディレクターやってます。Movable Typeとラーメン、ザンギ、酒が好き。
プロフィール詳細はこちら

アクセスの多い記事