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サービス経由で送る

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲