サーバー移管後にメールが届かなくなる原因のほとんどはDNS設定の不備です。SPF・DKIM・DMARCの仕組みと設定手順を、実案件の失敗談を交えながらわかりやすく解説します。
こんな経験、ありませんか?
サーバーの移管作業が完了して「よし、これで終わり!」と思ったその直後、クライアントから「お問い合わせフォームからのメールが来ていない」「取引先から返信が届かないと言われた」という連絡が届く——。
Web制作・運用に関わる方なら、一度は経験したことがあるのではないでしょうか。サーバー移管後のメール不達は、WordPressの引っ越しやVPS乗り換えのたびに発生しやすい、非常に頻度の高いトラブルです。
この記事では、メールが届かなくなる根本原因である「SPF・DKIM・DMARC」の三つの設定について、初めて触れる方でも理解できるよう、実案件での失敗談を交えながら解説します。読み終えた後には「何を・どこで・どう直せばいいか」が具体的にわかる状態を目指してください。
なぜサーバー移管でメールが届かなくなるのか
まず、メールが届かなくなるメカニズムを理解しましょう。
インターネット上でメールを送受信する仕組みは、「差出人を名乗るサーバーが本物かどうかを受信側が検証する」 という認証システムに支えられています。近年、迷惑メール対策が世界的に厳格化されており、GmailやMicrosoft 365は2024年以降、送信元の認証が不十分なメールを積極的にブロックまたはスパムフォルダに振り分けるようになりました。
この認証に使われるのが、以下の三つのDNSレコードです。
flowchart LR
A[メール送信] --> B{SPF検証}
B -->|Pass| C{DKIM検証}
B -->|Fail| G[スパム/拒否]
C -->|Pass| D{DMARC評価}
C -->|Fail| G
D -->|Pass| E[受信トレイへ]
D -->|Fail| F[DMARCポリシーに従う]- SPF(Sender Policy Framework):「このドメインからメールを送っていいサーバーはどれか」を宣言する
- DKIM(DomainKeys Identified Mail):メール本文にデジタル署名を付け、改ざんされていないことを証明する
- DMARC(Domain-based Message Authentication, Reporting & Conformance):SPF・DKIMの検証に失敗したとき、受信側がどう扱うかをドメイン所有者が指定する
サーバーを移管すると、メールを送信するサーバーのIPアドレスが変わります。ところがSPFレコードには旧サーバーのIPが書かれたまま、という状態になりがちです。受信側から見れば「申告と異なるサーバーから来た怪しいメール」と判断されてしまいます。
あるクライアントの事例では、共用サーバーからVPSへの移管後、SPFレコードの更新を忘れたまま運用を続けていました。移管から3日後、Google Workspaceを使う取引先にメールがまったく届いていないことが判明し、商談の機会損失が発生してしまいました。原因はシンプルでしたが、発覚が遅れたのが痛手でした。
SPF・DKIM・DMARCの設定手順
ここからは実際の設定方法を解説します。DNSのTXTレコードとして登録する作業が中心です。作業はドメインのDNS管理画面(お名前.com、さくらインターネット、Cloudflareなど)で行います。
Step 1:現在の設定を確認する
まず、現在どんなレコードが設定されているかを確認しましょう。ターミナルから dig コマンドが使えます。
# SPFレコードの確認
dig TXT example.com +short
# DKIMレコードの確認(セレクタ名は環境による。「default」や「mail」が多い)
dig TXT default._domainkey.example.com +short
# DMARCレコードの確認
dig TXT _dmarc.example.com +short
GUIツールを使いたい場合は MXToolbox(https://mxtoolbox.com) が便利です。ドメインを入力するだけでSPF・DKIM・DMARCの設定を一括チェックできます。
Step 2:SPFレコードを更新する
SPFレコードは、送信を許可するサーバーを列挙するTXTレコードです。
移管先のサーバー情報を確認し、以下のように記述します。
# 基本的な書き方(ホスト名は @ または空白)
v=spf1 include:_spf.example-mailserver.com ip4:203.0.113.10 ~all
各パーツの意味はこのとおりです。
v=spf1:SPFバージョン宣言include:_spf.example-mailserver.com:メールサービス側が用意しているSPFレコードをインクルードip4:203.0.113.10:直接IPアドレスで許可する場合~all:上記以外からのメールは「ソフトフェイル(疑わしいが拒否はしない)」
よく使うメールサービスのinclude句は以下のとおりです。
| メールサービス | include句 | 備考 |
|---|---|---|
| Google Workspace | include:_spf.google.com | Gmailも同様 |
| さくらのメール | include:spf.sakura.ne.jp | 共用サーバー向け |
| SendGrid | include:sendgrid.net | フォームメール送信によく使用 |
| Amazon SES | include:amazonses.com | AWSメール送信 |
| Xserver | include:xserver.jp | エックスサーバー向け |
注意:
include句は10個以上記述するとSPFルックアップ制限に引っかかります。できるだけまとめて記述しましょう。
Step 3:DKIMレコードを設定する
DKIMは、送信側サーバーが秘密鍵でメールに署名し、受信側がDNSに公開された公開鍵で検証する仕組みです。
鍵ペアの生成は、使っているメールサービスのコントロールパネルから行うのが一般的です。たとえばPostfixとOpenDKIMを自前で動かしている場合は以下のコマンドで生成できます。
# OpenDKIMで鍵ペアを生成する例
opendkim-genkey -t -s default -d example.com
# 生成されたファイル
# default.private ← サーバーに配置する秘密鍵
# default.txt ← DNSに登録するTXTレコードの内容
default.txt の内容をそのままDNSのTXTレコードとして登録します。ホスト名は default._domainkey.example.com です。
# DNSに登録するTXTレコードのイメージ
default._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4G..."
WordPressからフォームメールを送信している場合は、WP Mail SMTPプラグインなどを使ってSendGridやGoogle WorkspaceのSMTPリレー経由で送信することを強くお勧めします。サーバー直送より認証が安定し、DKIM署名も自動で付与されます。
Step 4:DMARCレコードを設定する
DMARCはSPFとDKIMの結果を使い、認証失敗時のポリシーを指定します。
# まずはモニタリングモードで開始する
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
p=none:認証失敗しても何もしない(まずはレポートだけ集める)rua=:集計レポートの送信先メールアドレス
運用状況を見ながら段階的に強化していきます。
よくある失敗パターンと対処法
ここでは現場でよく見る失敗を3つ紹介します。
❶ 旧サーバーのSPFレコードを削除せずに新旧が共存する
DNSに同一ホスト名のTXTレコードが複数あると、SPFのパース処理が不定になります。必ず既存のSPFレコードを削除してから新しいものを1行で登録してください。複数のサービスを使う場合は一つのレコードに include をまとめます。
❷ DNSのTTL(キャッシュ時間)を考慮していない
DNSレコードを更新しても、TTLの設定によっては数時間〜最大48時間反映されません。移管作業の前日にTTLを300秒(5分)程度に下げておくのが定石です。作業後は1時間ほど待ってからMXToolboxで再確認しましょう。
❸ WordPressのwp_mail()がサーバー直送のまま
PHPの mail() 関数やWordPressの wp_mail() をそのまま使っていると、移管先サーバーのIPがSPFやDKIMに含まれていないケースが頻発します。SMTPプラグインで外部のメール配信サービスを経由させるのが、最も安定した解決策です。
// functions.phpで直接SMTPを設定する場合の例(WP Mail SMTPプラグイン非使用時)
add_action( 'phpmailer_init', function( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.sendgrid.net';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'apikey';
$phpmailer->Password = 'YOUR_SENDGRID_API_KEY';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = '[email protected]';
$phpmailer->FromName = 'サイト名';
});
サーバー管理、丸ごとお任せください
サーバー保守・運用
監視・障害対応・パフォーマンス改善まで、安定稼働をサポートします
※ 通常1営業日以内にご返信します
まとめと次のステップ
SPF・DKIM・DMARCは、一度理解してしまえば対処はそれほど難しくありません。ただし、設定ミスが直接ビジネスのコミュニケーション障害に直結するという重大性を忘れないでください。移管前の事前確認と、移管後の動作検証がセットで必要です。
「自分でやってみたが設定が合っているか自信がない」「移管を控えているが何から手をつければいいかわからない」という方は、ぜひFivenine Designにご相談ください。神奈川を拠点に20年以上のサーバー・Web制作実績から、貴社の状況に合った対応をご提案します。