2026年6月27日
2026年6月27日
WordPressのメールが迷惑メールになるときの対策|送信元・SPF・DKIM・DMARCの設定
WordPressは、問い合わせフォームの通知、ユーザー登録、パスワード再設定などのメールを wp_mail() で送ります。初期状態では、Webサーバーの送信プログラムから、wordpress@サイトのドメイン という送信元で送られます。この送り方は、受信側から見ると「送信元のドメインが許可していないサーバーから届いたメール」になりやすく、迷惑メールに分類される原因になります。
この記事では、受信したメールで原因を確かめる方法と、WordPress側・DNS側の直し方を説明します(2026年10月時点)。
手順1:受信したメールのヘッダーで原因を確かめる
まず、迷惑メールに入ったメールのヘッダーを見て、送信ドメイン認証の結果を確かめます。Gmailの場合は、メールを開いて右上の「︙」(その他)から「メッセージのソースを表示」を選ぶと、SPF・DKIM・DMARCの結果が PASS または FAIL などで表示されます。ほかのメールソフトでも、「ヘッダーを表示」「ソースを表示」などの機能で、Authentication-Results: の行を確認できます。
Authentication-Results: mx.google.com;
dkim=pass header.i=@example.com header.s=selector1;
spf=pass smtp.mailfrom=bounce@example.com;
dmarc=pass (p=NONE) header.from=example.com
| 結果 | 意味 | 見直す点 |
|---|---|---|
spf=fail や spf=softfail |
送信したサーバーが、SPFレコードで許可されていない | 手順3のSPF |
spf=pass だが smtp.mailfrom が別のドメイン |
エンベロープの送信者がサーバーのホスト名などになっている | 手順2のエンベロープの送信者 |
dkim=none |
DKIMの署名が付いていない | 手順4のDKIM |
dmarc=fail |
SPFとDKIMのどちらも、Fromのドメインと一致する形で合格していない | 手順2〜4 |
手順2:送信元とエンベロープの送信者を自分のドメインにする
送信元(From)
WordPressの初期の送信元は wordpress@サイトのドメイン(先頭の www. は外す)です。実在するアドレスにするため、wp_mail_from と wp_mail_from_name のフィルターで変えます。
エンベロープの送信者(Return-Path)
メールには、画面に表示される送信元(From)とは別に、配送のときに使う「エンベロープの送信者」があります。受信したメールでは Return-Path: の行に表示され、SPFはこのアドレスのドメインで判定されます。WordPressの wp_mail() は、サーバーの mail() で送るときにこの値を指定しないため、apache@サーバーのホスト名 のような値になることがあります。その場合、SPFはサーバーのホスト名のドメインで判定され、Fromのドメインと一致しないのでDMARCの判定に使われません。
phpmailer_init アクションでエンベロープの送信者をFromと同じアドレスにします。次の内容を mu-plugin(wp-content/mu-plugins/ に置くだけで常に読み込まれるプラグイン)として mail-sender.php に保存します。
<?php
/**
* Plugin Name: メールの送信元設定
* Description: From とエンベロープの送信者を自分のドメインのアドレスにする。
*/
add_filter( 'wp_mail_from', function ( $email ) {
return 'noreply@example.com'; // 自分のドメインの実在するアドレス
} );
add_filter( 'wp_mail_from_name', function ( $name ) {
return 'サイト名';
} );
add_action( 'phpmailer_init', function ( $phpmailer ) {
$phpmailer->Sender = $phpmailer->From; // Return-Path を From と同じにする
} );
SMTPサーバー経由で送る場合は、エンベロープの送信者をSMTPサービスが決めることがあります。サービスの説明に従ってください。
問い合わせフォームでは訪問者のアドレスをFromにしない
問い合わせフォームの通知メールで、Fromに訪問者が入力したメールアドレス(たとえば someone@gmail.com)を使うと、自分のサーバーが他人のドメインを名乗って送ることになり、SPF・DMARCで不合格になります。Fromは自分のドメインのアドレスにし、訪問者のアドレスは返信先(Reply-To)に入れます。wp_mail() では、ヘッダーとして渡します。
<?php
$headers = [
'Reply-To: ' . $visitor_name . ' <' . $visitor_email . '>',
];
wp_mail( get_option( 'admin_email' ), 'お問い合わせがありました', $body, $headers );
Contact Form 7 では、メールの設定の「追加ヘッダー」に次のように書きます(your-email はフォームのメールアドレス欄の名前)。
Reply-To: [your-email]
Contact Form 7 のメールが届かないときの確認はContact Form 7のメールが届かないときの対処法で説明しています。
手順3:SPFレコードを設定する
SPFは、「このドメインのメールを送ってよいサーバー」をDNSのTXTレコードで公開する仕組みです。ドメインのDNSに、1つだけ登録します。
example.com. TXT "v=spf1 ip4:203.0.113.10 include:_spf.mail-provider.example ~all"
ip4::自分のWebサーバーから直接送る場合の、そのサーバーのIPアドレスinclude::メールサーバーやメール配信サービスを使う場合に、そのサービスが案内する値(サービスごとに違うので、サービスの説明から写す)~all:上記以外のサーバーからのメールは「疑わしい」と扱わせる(-allは「不合格」)
SPFのレコードは1つのドメインに1つだけにします。すでに v=spf1 で始まるレコードがある場合は、新しく追加せず、その中に追記します。include: などでDNSを参照する回数は、規格(RFC 7208)で10回までに制限されているため、サービスを増やしすぎないようにします。
手順4:DKIMの署名を付ける
DKIMは、送信するサーバーがメールに電子署名を付け、受信側がDNSに公開された公開鍵で確かめる仕組みです。署名を付けるのはメールを送るサーバーなので、WordPress側ではなく、送信に使うサービスやサーバーで設定します。
- メール配信サービスやレンタルサーバーのメール:管理画面でDKIMを有効にし、表示されたレコード(
セレクター名._domainkey.example.comのTXTまたはCNAME)をDNSに登録する - 自分のVPSから直接送る:OpenDKIM などで署名する設定が必要になる。運用の手間を考えると、SMTPサービスを経由して送るほうが現実的
DKIMの署名のドメイン(d=)がFromのドメインと一致していれば、SPFの結果に関係なくDMARCに合格できます。
手順5:DMARCレコードを設定する
DMARCは、Fromのドメインについて「SPFかDKIMのどちらかが、Fromのドメインと一致する形で合格すること」を求め、不合格のメールの扱いを受信側に伝える仕組みです。_dmarc という名前のTXTレコードで公開します。
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
p=none は「不合格でも特に処置しない(レポートだけ送る)」という意味です。最初は p=none で始め、rua= に届く集計レポートで、正規のメールがすべて合格していることを確かめてから、p=quarantine(迷惑メール扱い)や p=reject(受信拒否)に強めます。最初から p=reject にすると、設定の漏れがあったときに正規のメールまで届かなくなります。
手順6:DNSの設定を確かめる
登録したレコードは dig で確かめられます。
dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.com
selector1 の部分は、DKIMを設定したサービスが指定したセレクター名に置き換えます。設定後は、自分のGmailなどにテストメールを送り、手順1の方法で spf=pass、dkim=pass、dmarc=pass になっていることを確かめます。確認方法の詳細はSPF・DKIM・DMARCの設定を確認する方法も参照してください。
Gmailの送信者ガイドライン
Googleは、Gmail宛てに送る送信者に対して、送信者のガイドラインを公開しています。2026年10月時点の主な要件は次のとおりです。
- すべての送信者:SPFまたはDKIMを設定する、送信元のIPアドレスに正引き・逆引き(PTRレコード)を設定する、TLSで送信する、迷惑メールとして報告される率を0.3%未満に保つ
- 1日に約5,000通以上をGmail宛てに送る送信者:SPF・DKIM・DMARCのすべてを設定し(DMARCは
p=noneでもよい)、FromのドメインをSPFかDKIMのドメインと一致させる。宣伝目的のメールには、ワンクリックで配信を停止できる仕組みを付ける
詳細はGoogleの「メール送信者のガイドライン」で確認してください。WordPressの通知メールだけなら大量送信の要件に当たることは少ないですが、SPF・DKIM・DMARCの3つをそろえておくと、Gmail以外でも迷惑メールに分類されにくくなります。
送信サーバーの評判を確かめる
送信ドメイン認証がすべて合格していても、送信元のIPアドレスの評判が悪いと迷惑メールに分類されることがあります。
- VPSから直接送っている:IPアドレスの逆引き(PTRレコード)が設定されているか、ブロックリストに載っていないかを確かめます。Spamhausなどのブロックリストの運営者は、IPアドレスを調べられるページを公開しています
- 共用のレンタルサーバー:同じサーバーのほかの利用者の送信の影響を受けることがあります。契約しているメールサーバーやメール配信サービスのSMTPを経由して送るように切り替えます。設定方法はWordPressのメールをSMTP送信に変更する方法で説明しています
ニュースレターのように多くの宛先へ同じメールを送る用途には、wp_mail() ではなくメール配信サービスを使います。配信停止の仕組みや、送信量の管理をサービス側で行えるためです。
まとめ
- 迷惑メールに入ったメールのヘッダーで、SPF・DKIM・DMARCの結果を先に確かめる
- 送信元は
wp_mail_fromで自分のドメインの実在するアドレスにし、phpmailer_initでエンベロープの送信者も合わせる - 問い合わせフォームでは、訪問者のアドレスをFromにせず、Reply-To に入れる
- SPFは1ドメインに1レコード、DKIMは送信するサービスで有効にし、DMARCは
p=noneから始める - 共用サーバーやIPアドレスの評判に問題があるときは、SMTPサービス経由で送る