MailgunのSPF・DKIM・DMARC設定。
Mailgun(現在はSinch傘下)では、Sending → Domainsからドメインを認証します。そこでは、ルートドメインそのものではなく、専用の送信用サブドメイン(例:mg.yourdomain.com)に少数のDNSレコードを追加します。SendGridやKlaviyoのようなCNAMEのみのサービスとは異なり、Mailgunは本来の意味でSPFのincludeを使うサービスです。v=spf1 include:mailgun.org ~allを自分で公開し、あわせてDKIMレコードを追加します。これはAutomatic Sender Securityによる最新の自動ローテーションのCNAMEペア、または従来方式の静的なTXTレコードのいずれかです。トラッキング用のCNAMEレコードは任意です。正確なホスト名と鍵の値はアカウントごとに異なり、ダッシュボードに表示されます。すべてのレコードに緑のチェックマークが付くと、メールはMailgunから自社ドメインとして送信され、SPFとDKIMのアライメントが一致して、DMARCに成功します。
Mailgunを認証すべき理由
Mailgunのドメインを認証すれば、メールは迷惑メールフォルダーやバウンスではなく受信トレイに届くようになります。2024年2月以降、GmailとYahooは、すべての大量送信者(1日あたり約5,000通以上)に対し、SPF、DKIM、DMARCにアライメントが一致した状態で成功することを義務付けています。Microsoftも2025年に、Outlook/Hotmail/Live宛ての大量送信者に同様の要件の適用を始めました。自社ドメインを追加して確認するまで、Mailgunはサンドボックスのドメイン(sandboxXXXX.mailgun.org)からの送信しか許可しません。これは事前に許可した少数の受信者に限られ、自社のレピュテーションも持たないため、本番では使えません。ドメインを確認すると実際の送信に移行でき、SPFとDKIMのどちらも組織ドメインとアライメントが一致して、DMARCに成功します。築いた送信レピュテーションは、共有インフラではなく自社ドメインに蓄積されます。MailgunはAPI/SMTP中心で、トランザクションメール(パスワードリセット、領収書、アラート)によく使われるため、ここでレコードが壊れていると、ユーザーが実際に待っているメールが気付かないうちに届かなくなります。
MailgunにおけるSPFの実情
Mailgunは本来の意味でSPFのincludeを使うサービスなので、追加すべきレコードがあります。v=spf1 include:mailgun.org ~allです。SendGridのemサブドメインのように、SPFを代わりに満たしてくれるCNAMEレコードはありません。このTXTレコードは自分で公開します。これはAutomatic Sender Securityと従来方式のDKIMのどちらを使う場合でも必要です(この切り替えで変わるのはDKIMだけで、SPFは変わりません)。注意点は、include:mailgun.orgが異例なほど重いことです。実際のDNSで確認したところ、ネストを含めて5回のルックアップに展開されます。mailgun.orgはv=spf1 include:_spf.mailgun.org include:_spf.eu.mailgun.org -allを公開し、_spf.mailgun.orgはさらにinclude:_spf1.mailgun.orgとinclude:_spf2.mailgun.orgをネストしているため、1行でUSとEUの両方の送信リージョンをカバーします。つまり1つのincludeで、RFC 7208のDNSルックアップの10回制限の半分を使います。適切な対処法は、Mailgun自身も推奨しているとおり、Mailgunを専用の送信用サブドメイン(例:mg.yourdomain.com)に置くことです。includeはそのサブドメイン独自のSPFレコードに入るので、ルートドメインのSPFレコードのルックアップを消費せず、ルートドメインにすでにあるGoogle Workspace、Microsoft 365などの送信者と衝突しません。EUリージョンからしか送信しない場合は、メカニズムをinclude:_spf.eu.mailgun.orgに絞れます。こちらはip4のみで、ルックアップは1回です。
2つの設定方法
Automatic Sender Security:CNAMEによるDKIM(推奨)
- 2つのCNAMEレコード(ラベルはダッシュボードに表示。例:pdk1._domainkeyとpdk2._domainkey)で、DKIMをMailgunのインフラに委任します
- Mailgunが2048ビットの鍵を生成し、自身が管理するスケジュールで自動的にローテーションします(自分でいつでも強制的にローテーションすることもできます)
- 公開鍵を貼り付ける必要はなく、鍵が切り替わるときにDNSを編集し直す必要もありません
- ドメインの追加時にこの設定を有効にします。デフォルトではオフです
- SPFは引き続きv=spf1 include:mailgun.org ~allです。Automatic Sender Securityで変わるのは、DKIMの提供方法だけです
従来方式:1つのDKIM TXTレコード(デフォルト)
- Mailgunが表示する<selector>._domainkeyのホストに置く1つのTXTレコードで、k=rsa; p=<long base64>を格納します
- 鍵は静的です。Mailgunでローテーションし、DNSを手作業で編集し直す必要があります
- 2048ビットの鍵は、TXTの1文字列あたりの上限を超えることが多く、2つの引用符付き文字列に分割する必要があります
- Automatic Sender Securityをオフのままにした場合の方式です。機能はしますが、自動ローテーションはありません
設定手順
- 1
Sending → Domainsを開く
app.mailgun.com(US)またはapp.eu.mailgun.com(EU)にログインし、左メニューのSending → Domainsを開いて、Add New Domainをクリックします。
- 2
ルートドメインではなく送信用サブドメインを使う
yourdomain.comそのものではなく、サブドメイン(例:mg.yourdomain.com。mail.やemail.でも問題ありません)を入力します。これによりMailgunの送信レピュテーションを社内のメールボックスから分離でき、Google/MicrosoftとのMXの競合を避け、重いSPFのincludeをルートドメインから切り離せます。
- 3
正しいリージョンを選択
ドメインの作成時にUSまたはEUを選びます。リージョンによって、トラッキング用レコードとMXレコードの参照先がmailgun.orgとeu.mailgun.orgのどちらのホストになるか、どのアプリのURLでドメインを管理するかが決まります。間違ったリージョンのレコードでは確認できません。
- 4
Automatic Sender Securityを有効化
設定中にAutomatic Sender Securityをオンにします(デフォルトではオフです)。これにより、DKIMが自動ローテーションする2つの2048ビットのCNAMEレコードで提供され、鍵を編集し直す必要がなくなります。自社で管理する静的なDKIM TXTレコードが特に必要な場合にのみ、オフのままにしてください。
- 5
DNSレコードの一覧を開く
ドメインの作成後、それを開いてDomain Settings → DNS records(Domain Verification & DNSパネル)を表示します。Mailgunには、SPFのTXTレコード、DKIMレコード、任意のトラッキング用CNAMEレコード、任意のMXレコードが、コピーすべきアカウント固有の値とともに一覧表示されます。
- 6
SPFのTXTレコードを追加
送信用サブドメインに、TXTレコードを追加します。ホストはmg(つまりmg.yourdomain.com)、値はv=spf1 include:mailgun.org ~allです。そのサブドメインにすでにSPFレコードがある場合は、include:mailgun.orgを既存のものにまとめます。同じホストにSPFレコードを2つ公開してはいけません。
- 7
DKIMレコードを追加
Automatic Sender Securityがオンの場合は、Mailgunに表示される2つのCNAMEレコード(ラベルはpdk1._domainkey.mgやpdk2._domainkey.mgなど)を追加します。参照先は、Mailgunがホストするdkim1.mailgun.comの各ターゲットです。オフの場合は、表示されたセレクター(<selector>._domainkey.mgのホスト)に、k=rsa; p=…を含むDKIM TXTレコードを1つ追加します。DNSホストが必要とする場合は、2048ビットの鍵を2つの引用符付き文字列に分割してください。
- 8
トラッキング用のCNAMEレコードを追加(推奨)
CNAMEレコードを追加します。ホストはemail.mg、値はmailgun.org(US)またはeu.mailgun.org(EU)です。これにより、開封やクリックのトラッキングリンクがMailgunのドメインではなく自社ドメインを使うようになります。配信に必須ではありませんが、ブランディングと到達率のために推奨します。
- 9
メールを受信する場合のみMXレコードを追加
Mailgunでサブドメイン宛てのメールを受信または転送する場合は、優先度10のMXレコードを2つ追加します。mxa.mailgun.orgとmxb.mailgun.orgです(EU:mxa.eu.mailgun.org / mxb.eu.mailgun.org)。送信専用の場合はMXレコードを一切追加しません。また、GoogleやMicrosoftが受信トレイをホストしている場合は、ルートドメインのMXレコードをMailgunに向けないでください。
- 10
CloudflareのCNAMEをグレーのクラウドにする
DNSがCloudflareにある場合は、DKIMの_domainkey CNAMEレコードとemailのトラッキング用CNAMEレコードを「DNS only」(グレーのクラウド)に設定します。プロキシが有効なオレンジのクラウドのCNAMEレコードはMailgunに解決されず、確認に失敗します(SPF、DKIM TXT、DMARCはTXTレコードなので、プロキシの影響を受けません)。
- 11
Verify DNS Settingsをクリック
MailgunのDomain Settingsに戻り、Verify DNS Settingsをクリックして、すべてのレコードに緑のチェックマークが付くのを待ちます。DNSの反映は通常数分ですが、最大24~48時間かかることがあります。Mailgunは自動でも再チェックしますが、レコードがまだ黄色の場合はもう一度クリックしてください。
- 12
確認済みドメインから送信
アプリまたはSMTPの設定で、確認済みのサブドメインのアドレス(例:no-reply@mg.yourdomain.com)から送信します。サンドボックスのドメインからは決して送信しないでください。本番のトラフィックを向ける前に、テストメールを送り、認証されること(SPF、DKIM、DMARCがすべてPASSで、自社ドメインとアライメントが一致)を確認します。
追加するレコード
正確な値はMailgunのセットアップウィザードで生成されます。以下は、DNSホストに追加するレコードの形式を示したものです。
| タイプ | ホスト | 値 |
|---|---|---|
| TXT | mg | v=spf1 include:mailgun.org ~allSPFレコードは送信用サブドメイン(mg.yourdomain.com)に置きます。既存のレコードがある場合はそれにまとめます(SPFレコードは1つのホストにつき1つです)。EUのみの送信者はinclude:_spf.eu.mailgun.org(ルックアップ1回)を使えます。 |
| CNAME | pdk1._domainkey.mg | pdk1._domainkey.<hash>.dkim1.mailgun.comDKIM鍵1(Automatic Sender Security、自動ローテーション)。ホストのラベルと参照先はアカウントごとにダッシュボードに表示されます。 |
| CNAME | pdk2._domainkey.mg | pdk2._domainkey.<hash>.dkim1.mailgun.comDKIM鍵2。鍵1と並行して自動ローテーションされ、鍵の切り替えをスムーズに、空白なく行えます。 |
| TXT | <selector>._domainkey.mg | k=rsa; p=MIGfMA0GCSqGSIb3DQEB...IDAQAB従来方式の1つのDKIM TXTレコードです。Automatic Sender Securityがオフの場合にのみ使います。セレクターと鍵はアカウントごとに異なり、DNSホストが必要とする場合は2048ビットの鍵を2つの引用符付き文字列に分割します。 |
| CNAME | email.mg | mailgun.org自社ドメインでの開封とクリックのトラッキングです。EUリージョンはeu.mailgun.orgを使います。任意です。 |
| MX | mg | mxa.mailgun.org優先度10。Mailgunでメールを受信する場合のみ。mxb.mailgun.org(優先度10)も追加します。EU:mxa/mxb.eu.mailgun.org。 |
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comDMARCポリシーの置き場所は組織ドメインで、mgサブドメインではありません。1つのドメインにつき1つです。p=noneから始めます。 |
ルートドメインのSPF(v=spf1)のTXTレコードは1つだけにし、すべての送信元をこの1行にまとめてください。SPFレコードが2つあると、それ自体がエラーになります。
DNSルックアップの10回制限
SPFのDNSルックアップは10回までに厳格に制限されており、超えるとpermerrorを返して、どの受信側でも検証されなくなります。Mailgunの設定がこの上限のうち何回を消費するかは、次のとおりです。
Mailgunは10回のルックアップのうち5回を消費します。ip4:とip6:のメカニズムはルックアップを消費しません。
DKIM
Mailgunでは、DKIMの方式を2つから選べます。選択によって変わるのはDKIMだけで、SPFは変わりません。推奨はAutomatic Sender Securityです。ドメインの追加時に有効にすると、Mailgunが2つのCNAMEレコードを発行します(ラベルはアカウントごとに表示されます。例:pdk1._domainkey.mg.yourdomain.comとpdk2._domainkey.mg.yourdomain.com)。それぞれ、Mailgunがホストするdkim1.mailgun.com上のアカウント固有の参照先を指します。CNAMEレコードでMailgunに委任するため、秘密鍵はMailgunが保持し、これらのセレクターで2048ビットの公開鍵を公開して、Mailgunが管理するスケジュールで自動的にローテーションします(自分でいつでも強制的にローテーションすることもできます)。鍵をコピーしたり、DNSを再度編集したりする必要はありません。セレクターが2つあるのは、古い鍵を廃止する前に新しい鍵を公開し、署名に空白期間を作らないためです。従来方式の代替手段(Automatic Sender Securityをオフのままにした場合のデフォルト)は、Mailgunが表示するセレクターに置く1つの静的なDKIM TXTレコードです。ホストは<selector>._domainkey.mg.yourdomain.comの形式で、k=rsa; p=<long base64 public key>を格納します。この鍵は静的で、ローテーションするにはMailgunで再生成してDNSを編集し直す必要があります。また、2048ビットの値はTXTの1文字列あたりの上限である255文字を超えることが多く、2つの引用符付き文字列に分割する必要があります(Mailgunに分割した形が表示されます)。どちらの場合も、DKIMのd=は送信用サブドメインになり、緩和されたアライメントで組織ドメインと一致するので、DMARCに成功します。
DMARC
DMARCは別のTXTレコードで、Mailgunが生成するレコードには含まれません。mgサブドメインではなく、組織(ルート)ドメインの_dmarc.yourdomain.comに1回だけ公開します。値はv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comで始めます。p=noneは監視のみのため、MailgunのメールがSPFとDKIMに、自社ドメインとアライメントが一致した状態で成功していることを確認している間、配信には影響しません。表示上のFromがyou@yourdomain.comで、Mailgunの署名がd=mg.yourdomain.comの場合でも、DMARCのアライメントは機能します。緩和されたアライメントでは、サブドメインとその親を同じ組織ドメインとして扱うからです(MailgunのReturn-Pathも同じ送信用サブドメインにあるため、SPFのアライメントも一致します)。ルートドメインのDMARCレコードはサブドメインにも適用されるので、既存の_dmarcレコードがmg.yourdomain.comも対象にしています。サブドメインを別に扱いたい場合にのみ、サブドメイン専用のポリシーを追加してください(ルートドメインのレコードのsp=、または専用の_dmarc.mgレコード)。1~2週間、集計レポート(rua)を確認し、Mailgunがアライメントの一致した、成功している送信元として安定して表示されるようになったら、p=quarantine、最終的にp=rejectへと段階的に引き上げます。送信者がいくつあっても、_dmarcレコードはドメインにつき1つだけにしてください。
正しく設定できたか確認する
MailgunのDNS管理画面の緑のチェックマークだけで判断しないでください。これはレコードが解決されることを確認するもので、実際のメールが認証されることを確認するものではありません。確認済みのサブドメインのアドレスから自分宛てにテストメールを送り(MailgunのSend test emailボタンを使うか、自社アプリから送ります)、Gmailで開いて3点メニュー → Show originalを選びます。SPF: PASS、DKIM: PASSがどちらも自社ドメインを示し、さらにDMARC: PASSと表示され、DKIM署名のd=がmg.yourdomain.comであれば成功です。Qualisendのドメイン診断で送信用サブドメインをチェックし、SPF、DKIM、DMARCの各レコードがすべて解決されることと、SPFのincludeで10回のルックアップを超えていないことを確認します。DMARCの集計レポートが届き始めたら、DMARCレポート解析にレポートをドロップします。Mailgunは、アライメントの一致した、成功している送信元として表示されるはずです。MailgunのLogsタブでも、配信と認証の失敗をメールごとに確認できます。
よくある注意点
- DNS設定
include:mailgun.orgは重いincludeです。実際のDNSで確認したところ、1行で両方のリージョンをカバーするため、5回のDNSルックアップに展開されます(mailgun.org → _spf.mailgun.org、さらにネストされる_spf1と_spf2、加えて_spf.eu.mailgun.org)。これはRFC 7208のDNSルックアップの10回制限の半分です。Mailgunを独自の送信用サブドメインに置けば、includeをルートドメインのSPFレコードから完全に切り離せます。EUのみの送信者はinclude:_spf.eu.mailgun.org(ルックアップ1回)に絞れます。
- 適用範囲
USとEUのリージョンは別々です。EUのドメインはapp.eu.mailgun.comで管理し、トラッキング用レコードとMXレコードはeu.mailgun.orgのホストを指します。間違ったリージョンのレコードをコピーしたり、間違ったダッシュボードにログインしたりすると、ドメインはいつまでも確認されません。
- 適用範囲
サンドボックスのドメイン(sandboxXXXX.mailgun.org)はテスト専用です。送信先は事前に許可した少数の受信者に限られ、レピュテーションも築けません。本番では使わず、自社ドメインを追加して確認してください。
- 適用範囲
Google WorkspaceやMicrosoft 365がメールボックスをホストしている場合は、ルートドメインのMXレコードをMailgunに向けないでください。受信メールが届かなくなります。Mailgunには専用のサブドメインを使うか、送信専用ならMXレコードそのものを省略してください。
- DNS設定
2048ビットのDKIM TXTレコードの長さ:1つの長いp=の文字列は、TXTの上限である255文字を超えることが多く、拒否されたり切り詰められたりします。Mailgunの表示どおりに、2つの引用符付き文字列に分割してください。Automatic Sender SecurityのCNAMEレコードなら、この問題は完全に避けられます。
- DNS設定
Cloudflareのプロキシがあると、CNAMEレコードは機能しません。DKIMの_domainkey CNAMEレコードとemailのトラッキング用CNAMEレコードを「DNS only」(グレーのクラウド)に設定してください。プロキシが有効なオレンジのクラウドのレコードはMailgunに解決されず、確認に失敗します。
- 認証失敗の原因
SPFのTXTレコードは1つのホストにつき1つです。送信用サブドメインにすでにSPFレコードがある場合は、2つ目のSPFのTXTレコードを追加せず、include:mailgun.orgをそこにまとめてください。1つのホストにSPFレコードが2つあると、PermErrorになり、SPFは完全に失敗します。
- DNS設定
ホスト欄の重複:多くのレジストラはドメインを自動で付加するため、mg.yourdomain.comと入力するとmg.yourdomain.com.yourdomain.comになります。管理画面が求めるラベルだけ(mg、pdk1._domainkey.mg、email.mg)を入力してください。
SPFレコードを作成
以下ではMailgunがあらかじめ選択されています。他に利用している送信プラットフォームを追加し、1つにまとめたレコードを公開してください。
このドメイン自身のサーバー
ドメインが(上記のサービスを経由せず)直接メールを送信する場合は、ドメイン自体を許可します。
その他の送信元・IP
リストにないもの(別のサービスのSPFホストや特定のIPアドレス)を追加します。
接頭辞のinclude:は自動で付加されます。サービスのドキュメントに記載されているホスト名を入力してください。
その他すべての送信元へのポリシー
上記に記載されていないサーバーからのメールを、受信側がどう処理すべきかを指定します(allメカニズム)。
- ルートドメインにTXTレコードとして公開します。ホストは@(ドメインそのもの)、値は上記の文字列全体です。
- SPFレコードは1つのドメインにつき1つだけにします。すべての送信元をこの1行にまとめてください。v=spf1で始まるTXTレコードが2つあると、両方とも無効になります。
- DNSルックアップは10回以内に収めてください。include:、a、mxはそれぞれ1回とカウントされ、includeは内部でさらにルックアップを発生させることがあります。ip4:とip6:はカウントされません。
送信ドメイン認証の設定が済んだら、次は検証済みのクリーンなリストへの配信です。
リストを検証MailgunのSPFに関するよくある質問
関連記事
トランザクションメール・APIの他のサービス
- Mailjet
- Mailtrap
- Mandrill (Mailchimp Transactional)
- Postmark
- Resend
- Scaleway Transactional Email
- SendGrid
- SMTP.com
公開したら、ドメイン診断ですべてのレコードが正しく解決されることを確認し、DMARCレポート解析で自社ドメインを名乗って送信している送信元を把握します。作成ツールではすべての送信元を確認できます。ただし、認証は到達率対策の半分にすぎません。送信IPやドメインがブラックリストに掲載されていると、SPFの設定がどれほど適切でも迷惑メールに振り分けられます。そのため、ブラックリスト監視で掲載状況を確認しておくことをおすすめします。
認証の次は、リストをクリーンに保つ
SPF、DKIM、DMARCに成功すれば受信トレイに届き、クリーンなリストならその状態を維持できます。お手持ちのリストも検証してクリーニングできます。100クレジット無料、クレジットカード登録不要で始められます。