このページの内容WordPressが標準でメールを送信する仕組み
WordPressサイトは、所有者が思っている以上に多くのメールを送信します。お問い合わせフォームの通知、パスワードのリセット、新規ユーザーへの歓迎メール、コメントのモデレーション通知、さらにショップでは、WooCommerceによる注文確認、請求書、発送状況の更新メールが送信されます。そのほとんどは意識して設計されておらず、顧客から注文メールが届かなかったと連絡が来るまで、誰も確認しません。
こうしたメールが迷惑メールに振り分けられた場合は、文面を変更する前に、メールがサーバーからどのように送信されているかを確認してください。WordPressでは、その部分が初期設定で、到達率が最も低い方法になっています。
WordPressが標準でメールを送信する仕組み
WordPress本体と、WooCommerceやフォームプラグインを含むメール送信機能を持つほぼすべてのプラグインは、wp_mail()という1つの関数を使用します。この関数はメッセージをPHPMailerに渡します。PHPMailerはデフォルトでPHPのmail()に渡し、さらにホスティングサーバー上のメールプログラムへ渡します。メールプロバイダーへのログインも、署名も、このサーバーがドメインのメールを送信できることを示すDNS設定もありません。
送信者アドレスには、wordpress@の後にサイトのドメインを付けたものが使用されます。WordPressは先頭のwww.を削除します。変更していなければ、顧客のFrom欄にはこのアドレスが表示されますが、多くのサイトではこのメールボックス自体が作成されていません。
共有ホスティングでは、メッセージはホスティング事業者のサーバーから、多数のほかのサイトと共有するIPアドレスを経由して送信されます。そのうち1つのサイトが購入したリストにメールを送ったり、侵害されてスパムを大量送信し始めたりすると、そのIPアドレスの評価が悪化します。その結果、パスワードリセットメールも同じIPアドレスから送信されます。
そのため、デフォルトのWordPress環境から送信されるメールは、SPFがドメインと整合しません。バウンスアドレスは通常、ホスティング事業者独自のサーバー名のままです。代わりに自分のアドレスが使われても、SPFは完全に失敗します。ドメインのDKIM署名もないため、DMARCも失敗します。GmailとYahooは2024年2月に送信者向けルールを導入しました。Microsoftも2025年5月、Outlook.comに1日5,000通を超えるメールを送信するドメインを対象に同様のルールを導入しました。また、2025年11月以降、Gmailはルールに違反するメールを迷惑メールに振り分けるのではなく、以前より多く拒否しています。
実際のメールサービスから送信する
最も重要な対処は、mail()の使用をやめることです。SMTPプラグインをインストールします。一般的なのはWP Mail SMTP、FluentSMTP、Post SMTPで、いずれにも無料版があります。次に、Google WorkspaceやMicrosoft 365などのメールボックスプロバイダー、またはAmazon SES、Brevo、SendGrid、Mailgunなどのトランザクションメールサービスに接続します。
プラグインはwp_mail()の下で使用される送信方法を置き換えるため、各プラグイン自体に手を加えなくても、すべてのプラグインからのメールが新しい方法で送信されます。プラグインにプロバイダーのAPIオプションがある場合は、パスワードを使う通常のSMTPではなく、そのAPIを使用します。WP Mail SMTPによると、ホスティング事業者がSMTPポートをブロックしている場合でも、API経由なら動作します。
次の作業は省略されがちです。そのプロバイダーでドメインを認証します。各プロバイダーから、DNSに公開するレコードが提供されます。通常はDKIM用のCNAMEレコードが2つか3つと、SPFのinclude、またはカスタムのreturn-pathドメインです。これらのレコードをDNSに追加するまでは、プロバイダー自身の名前が署名に使用されるため、ホスティング環境で発生したときと同様にDMARCが失敗します。
コンタクトフォームのFromアドレス
Contact Form 7やWPFormsなどのフォームプラグインでは、受信する通知のFrom行に何を入れるかを選択できます。多くの設定では、Replyを押すと訪問者に返信できるように、訪問者のアドレスをFromに指定しています。便利そうに見えますが、DMARCはまさにこれを防ぐために作られています。
Annaという訪問者がanna@yahoo.comから問い合わせたとします。サイトは、Yahooが一度も承認していないサーバーを通じて、yahoo.comから送信されたと主張するメッセージを送ることになります。yahoo.comはp=rejectのDMARCポリシーを公開しているため、このポリシーに従う受信側は通知を偽装メールとして拒否します。Gmailの訪問者の場合、ポリシーはより緩やかで、多くの場合は迷惑メールに振り分けられます。WPFormsもドキュメントでこの点を明確に警告しています。Fromは自分、Reply-Toは訪問者
代わりに、次のように設定します。
- From:
forms@yourdomain.comなど、自分のドメインのアドレスです。SMTPプラグインで認証しているものと同じドメインを使用します。 - Reply-To: フォームのフィールドに入力された訪問者のアドレスです。Replyを押しても、引き続きAnnaに返信できます。
- To: 実際に確認しているメールボックスです。
Contact Form 7では、Mailタブで設定します。Fromに自分のアドレスを入力し、Additional headersにReply-To: [your-email]を追加します。ほかのフォームプラグインでは、通知設定にReply-Toフィールドがあります。
WooCommerceのメール
WooCommerceには独自の送信者設定があります。WooCommerce、Settings、Emailsの順に進み、Email Sender Optionsセクションで「From」の名前と「From」のアドレスを設定します。初期状態では、サイトの管理者メールアドレスが使用されます。ショップをインストールした人がそこにGmailのアドレスを使用していた場合、すべての注文確認メールがgmail.comから送信されたように見え、上記の問い合わせフォームと同じ理由でDMARCに失敗します。ここには認証済みドメインのアドレスを設定してください。送信者名にはショップ名が適しています。(自分宛てに送信される注文通知については、WooCommerceがすでに顧客をReply-Toに設定しており、これは正しい方法です。)
ショップのメールでは、問い合わせフォームでは起きない問題が2つあります。
1つ目は送信量です。セール用またはニュースレター用のプラグインが、注文確認メールと同じ経路で顧客にメールを送信すると、マーケティングメールとトランザクションメールが同じレピュテーションを共有することになります。ニュースレターに苦情が寄せられると、領収書メールにも影響します。2種類のメールを別々のサービスから送信すれば分離できます。マーケティング用に別のサブドメインを使うことも多少は役立ちますが、受信側は引き続きメインドメインのレピュテーションも考慮します。
2つ目は配信停止の問題です。注文確認メールとパスワードリセットメールはトランザクションメールなので、GmailとYahooのワンクリック配信停止ルールは適用されません。過去の購入者に送信するレビュー依頼、カート放棄のリマインダー、「こちらもおすすめです」というメールはマーケティングメールです。これらを大量に送信する場合、ルールが全面的に適用されるため、ワンクリックで配信停止できるオプションを含むList-Unsubscribeヘッダーが必要です。これらを送信するアドオンがそのヘッダーを追加しているか確認してください。どちらの場合でも、以下のテストで確認できます。
DNS側を簡単に説明します
どのサービスから送信する場合でも、メールが信頼されるには、ドメインのDNSに3つの設定が必要です。詳しい手順はSPF、DKIM、DMARCの解説にあります。ここでは、WordPressサイトにとって何を意味するのかを説明します。
- SPF。 ドメインからの送信を許可する送信元を記載した、1つのTXTレコードです。多くの送信サービスは独自のバウンスドメインでアライメントを行うため、ここを変更する必要はありません。利用するサービスから
include:の追加を求められ、ドメインにメールボックスプロバイダー用のレコードがすでにある場合は、そのレコードに追加してください。2つ目のレコードを作成しないでください。SPFレコードが2つあるとエラーになり、両方とも機能しなくなります。結果はSPFチェッカーで確認できます。 - DKIM。 送信サービスから提供されたレコードです。レコードが有効になると、サービスはすべてのメールにドメインの署名を付けます。DMARCはこの署名を確認します。
- DMARC。
_dmarc.yourdomain.comに設定するTXTレコードです。まずv=DMARC1; p=none; rua=mailto:と、実際に確認するメールアドレスを指定します。その後、レポートで自分のメールに失敗がないことを確認してから、ポリシーを厳しくしてください。DMARCチェッカーで現在の設定を確認できます。
ホスティングサーバーが、cronジョブや古いプラグインなどから独自にメールを送信している可能性があることにも注意してください。これらはwp_mail()ではなくmail()を直接呼び出します。このようなメールはSMTPプラグインを経由しないため、DMARCレポートには予期しない送信元として表示されます。
テストメッセージではなく、実際のメールをテストする
すべての SMTP プラグインには「send test email」ボタンがありますが、確認できるのは接続が機能していることだけです。WooCommerce が生成する注文確認メール、Reply-To が設定されたフォーム通知、WordPress がリンクを挿入するパスワードリセットメールを確認することはできません。
そこで、WordPress から実際のメールを送信します。ホームページで発行するテスト用アドレスは1通のメールのみ受信するため、確認するメールごとに新しいアドレスを取得します。フォームの場合は、そのアドレスを一時的に通知先に設定してフォームを送信します。WooCommerce の場合は、そのアドレスを顧客のメールアドレスとしてテスト注文を行います。パスワードリセットの場合は、テストユーザーにそのアドレスを設定してリセットをリクエストします。メールごとに個別のレポートが作成され、SPF、DKIM、DMARCとそのアライメント、21件のブロックリスト、コンテンツとリンク、一括送信者向けルールを確認できます。Gmail、Outlook、Yahooなどのプロバイダーでどのフォルダーに届くかを確認するには、件名に識別子を付けた同じメールを複数の受信トレイへ送る必要があります。フォームやショップの注文ではできないため、この部分は自分で送信するメールで確認してください。
テスト注文を手動で行いたくない場合は、無料のWordPressプラグインを使用できます。このプラグインは、顧客宛てのメールと同じ経路であるサイト独自のwp_mail()を通じてこれらのメールを送信し、結果をダッシュボードに表示します。また、サイトがこれまでに検出されていない種類のメールを送信し始めた場合にも通知します。
それでもスパムに振り分けられる場合
認証に合格し、Fromアドレスが自分のドメインであるにもかかわらず、メールがスパムに振り分けられる場合は、送信に使用している環境のレピュテーションを確認します。mail()を使用している場合、共有ホスティングのIPがブロックリストに登録されていることがよくある原因です。ブロックリストチェッカーで確認できます。コンテンツの影響は一般に考えられているほど大きくありません。リンクが1つと3行のテキストだけのフォーム通知が、それだけでフィルターに引っかかることはほとんどありませんが、重いHTMLテンプレート、大きな画像1枚、短縮URLを含むWooCommerceメールは引っかかる可能性があります。
1通のメッセージを確認し、レポートに示された問題を修正してから、新しいアドレスにもう一度送信します。