完璧なウェルカムメールを書いて数ミリ秒で送信しても、迷惑メールフォルダーに入ってしまえば読まれません。Gmail、Outlook、Yahooなどの受信側プロバイダーは、誰かが読むよりずっと前にメッセージの振り分け先を決めており、最初にチェックするのは、送信者が名乗っているとおりの本人かどうかです。
その問いに答えるのが、SPF、DKIM、DMARCという3つのDNSレコードです。このチェックリストでは、それぞれをわかりやすく説明し、送信に使うドメインでの設定方法を紹介します。
これまで以上に重要な理由
2024年2月、GoogleとYahooは、自社のユーザーにメールを送るすべての送信者に対して、より厳しいルールの適用を始めました。
- すべての送信者は、SPFまたはDKIMで認証し、TLS経由で送信し、迷惑メールの報告率を低く保つ必要があります(Googleは0.3%未満を求めています)。
- 大量送信者(Gmail宛てに1日あたりおよそ5,000通以上を送る送信者)は、SPFとDKIMとDMARCポリシーをすべて備え、表示されるFromのドメインをそれらと一致(アライメント)させる必要があります。マーケティングメールには、ワンクリックでの配信停止も必要です。
他のプロバイダーもこれに続いています。これらのチェックに合格しないメッセージは、迷惑メールに振り分けられるだけでなく、受信自体を拒否されるケースが増えています。
Inbixioの位置づけ
Inbixioでは、メールはお使いのSMTPサーバー、つまりEmail Servers(メールサーバー)で接続したメールボックスから配信されます。そのため、認証レコードに記述するのはInbixioではなく、お使いのメールプロバイダー(Google Workspace、Microsoft 365、Zoho、ホスティング事業者)です。ドメインに一度設定すれば、APIから送るすべてのメールにその効果が及びます。
以下の例ではyourco.comを使っています。ご自身のドメインに置き換えてください。
1. SPF:ドメインの代わりに送信できるのは誰か
SPF(Sender Policy Framework)は、そのドメインのメールを送信してよいサーバーを列挙したTXTレコードです。受信側は、メッセージを配信したサーバーをこのリストと照合します。
ドメインのルートにTXTレコードを1つ追加します。
yourco.com. TXT "v=spf1 include:_spf.google.com ~all"
include:の部分は、プロバイダーによって異なります。
| プロバイダー | SPFのinclude |
|---|---|
| Google Workspace | include:_spf.google.com |
| Microsoft 365 | include:spf.protection.outlook.com |
| Zoho Mail | include:zohomail.com |
| ホスティング事業者 | ホスティングのコントロールパネルに表示されます |
つまずきやすいルール:
- SPFレコードはドメインごとに1つだけ:2つのサービスを使う場合は、
v=spf1 include:_spf.google.com include:spf.protection.outlook.com ~allのように1つにまとめます。SPFレコードが2つあると、両方とも無効になります。 - DNSルックアップは最大10回まで:
include:はそれぞれ1回とカウントされ、その中に含まれるincludeもカウントされます。使わなくなったサービスは削除しましょう。 - 設定中は
~allで終える(ソフトフェイル):リストが完全だと確信できたら、-all(ハードフェイル)に変更します。
2. DKIM:すべてのメッセージに署名する
DKIM(DomainKeys Identified Mail)は、各メールに暗号署名を付けます。メールプロバイダーが秘密鍵で署名し、対応する公開鍵をDNSで公開することで、受信側はメッセージが改ざんされておらず、本当にそのドメインから送られたことを検証できます。
このレコードを手で書く必要はありません。プロバイダーが生成してくれます。
- Google Workspace:Admin console → Apps → Google Workspace → Gmail → Authenticate email(管理コンソール → アプリ → Google Workspace → Gmail → メールの認証)。
- Microsoft 365:Microsoft Defender portal → Email authentication settings → DKIM(Microsoft Defenderポータル → メール認証の設定 → DKIM)。
- Zoho Mail:Admin console → Domains → your domain → Email configuration → DKIM(管理コンソール → ドメイン → 対象のドメイン → メール設定 → DKIM)。
いずれも、公開すべきレコードが提示されます。通常はgoogle._domainkey.yourco.comのような名前のTXTレコードまたはCNAMEレコードです。DNSに追加して反映を待ち、プロバイダーのコンソールでStart authentication(認証を開始)またはそれに相当するボタンをクリックします。選択できる場合は2048ビットの鍵を使いましょう。
3. DMARC:すべてを結びつけるポリシー
DMARCは、メッセージがSPFとDKIMに失敗したときにどう扱うかを受信側に伝え、レポートを送るよう依頼する仕組みです。また、アライメントもチェックします。つまり、表示されるFromアドレスのドメインが、SPFまたはDKIMに合格したドメインと一致している必要があります。
まずは監視モードから始めます。
_dmarc.yourco.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@yourco.com; adkim=r; aspf=r"
p=noneは監視のみを行います。レポートを確認している間、何もブロックされません。rua=は、日次の集計レポートの送信先です。レポートはXMLファイルなので、無料のDMARCレポートビューアーを使うと読みやすくなります。
2〜4週間ほど問題のないレポートが続いたら、ポリシーを段階的に強化します。まずp=quarantine(失敗したメールは迷惑メールに振り分け)、次にp=reject(失敗したメールは拒否)です。この最後のステップこそが、他人があなたの名前でフィッシングメールを送るのを防ぎます。
4. 送信元アドレスを統一する
Inbixioでは、メールは接続したSMTPのユーザー名のアドレス(例:notifications@yourco.com)から送信されます。アライメントをシンプルに保つには、次のようにしましょう。
- SPF、DKIM、DMARCを設定したのと同じドメインのアドレスから送信する
- 送信元アドレスは、少数の決まったもの(
notifications@、security@、billing@)に絞る - サービスごとに異なるアドレスを使う場合は、アドレスごとにサーバーを1つずつ接続し、各APIキーをそのサーバーに固定する
5. 評価を守るための習慣
認証は送信者が誰かを証明するものですが、受信側に信頼されるかどうかは送信者の振る舞いで決まります。
- メールを期待している人にだけ送る:トランザクションメール(領収書、リセット、コード)は迷惑メールの報告率が非常に低いものです。マーケティングメールは分けて、オプトインにしましょう。
- バウンスしたアドレスを削除する:無効なメールボックスに繰り返し送信すると、スパマーのリストのように見えます。バウンスの通知は送信元のメールボックス(Inbixioに接続したもの)に届くので、そこを確認して、該当するアドレスをリストから削除しましょう。
- 人間らしく書く:わかりやすい件名、プレーンテキストでも読みやすいレイアウト、返信を受け付ける送信元アドレスを使い、短縮URLは使わないようにします。
- 送信量は徐々に増やす:新しいドメインから突然50,000通のメールが送られると、不審に見えます。数週間かけて送信量を増やしましょう。
設定を確認する方法
- 自分が管理しているGmailアドレスに、Inbixio経由でテストメールを送ります。
- Gmailでメッセージを開き、⋮ → Show original(日本語表示では「メッセージのソースを表示」)をクリックして、
SPF: PASS、DKIM: PASS、DMARC: PASSと表示されていることを確認します。 - 継続的に監視するには、Google Postmaster Toolsにドメインを登録し、迷惑メール率や評価を確認します。
チェックリスト
- メールプロバイダーを含むSPFレコードが1つだけあり、ルックアップは10回未満
- プロバイダーでDKIMを有効にし、DNSレコードを公開して検証済み
- DMARCを
p=noneに設定し、レポートを監視しているアドレスに送っている - 送信元アドレスが、SPF、DKIM、DMARCのレコードと同じドメインにある
- Gmailの「メッセージのソースを表示」で、3つすべてがPASSになっている
- DMARCを
quarantine、さらにrejectへ移行するリマインダーを設定している