2026年5月20日

2026年5月20日

Contact Form 7でメールが届かないときの確認手順|送信元・ステータス・SMTP・SPF

Contact Form 7(CF7)でメールが届かないときは、フォームの画面に出るメッセージで、調べる場所が分かれます。

  • 「ありがとうございます。メッセージは送信されました。」と出るのに届かない → WordPress はメールを送り出している。送信元の設定、迷惑メール判定、受信側での拒否を調べる
  • 「メッセージの送信に失敗しました。後でまたお試しください。」と出る → WordPress の送信処理が失敗したか、スパムと判定された。下の「2. 送信結果のステータスを確かめる」で見分ける

画面の名前は、2026年11月時点で WordPress.org で配布されている Contact Form 7 6.2 のファイルと日本語の翻訳で確認したものです。

1. メールタブの設定を確認する

管理画面の「お問い合わせ → コンタクトフォーム」でフォームを開き、「メール」タブを確認します。

項目 確認すること
送信先 受け取りたいアドレスになっているか。初期値は [_site_admin_email](「設定 → 一般」の管理者メールアドレス)
送信元 サイトと同じドメインのアドレスか。初期値は [_site_title] <wordpress@サイトのドメイン> の形(管理者メールアドレスがサイトと同じドメインなら、そのアドレス)
題名 空になっていないか
追加ヘッダー 返信先は Reply-To: [your-email] のようにここで指定する
メッセージ本文 フォームのタグ名([your-name] など)がフォーム側の名前と一致しているか

いちばん多い原因は「送信元」に問い合わせた人のメールアドレス([your-email])を入れてしまう設定です。たとえば Gmail のアドレスを送信元にしてサイトのサーバーから送ると、受信側は「Gmail 以外のサーバーが Gmail のアドレスを名乗っている」と判断し、迷惑メールにしたり受け取りを拒否したりします。送信元はサイトのドメインのアドレスにして、問い合わせた人に返信できるようにしたい場合は「追加ヘッダー」に Reply-To: を書きます。

送信元:       [_site_title] <wordpress@example.com>
追加ヘッダー: Reply-To: [your-email]

送信元がサイトのドメインと違う場合、CF7 はフォームの編集画面に「サイトのドメインに属していないメールアドレスが送信元に設定されています。」と警告を出します。この警告が出ていないかも確認してください。

自動返信(問い合わせた人への確認メール)は「メール (2) を使用」をオンにして設定します。メール (2) も、送信元はサイトのドメインのアドレスにします。

2. 送信結果のステータスを確かめる

CF7 は、メールの送信に失敗したときと、スパムと判定したときに、どちらも初期設定では同じ「メッセージの送信に失敗しました。後でまたお試しください。」を表示します。どちらなのかは、ブラウザーの開発者ツールで確かめられます。

  1. フォームのページを開き、開発者ツールの「ネットワーク」タブを開く
  2. フォームを送信する
  3. feedback で終わるリクエスト(/wp-json/contact-form-7/v1/contact-forms/フォームID/feedback)の応答を見る

応答の JSON の status の値で、結果が分かります。

status 意味 次に見るところ
mail_sent WordPress がメールを送り出した 3〜5(送信元・迷惑メール・SMTP・DNS)
mail_failed WordPress のメール送信(wp_mail())が失敗した 4(エラーの記録)と5(SMTP)
spam スパム対策(reCAPTCHA、Akismet、拒否リストなど)でスパムと判定され、メールは送られていない スパム対策の設定
validation_failed 入力内容のエラー フォームの入力と必須項目

3. 送信をスキップする設定が残っていないか

フォームの「その他の設定」タブに次のどちらかが書かれていると、メールは送られないのに、送信完了のメッセージが表示されます。テストのために書いたまま残っていないか確認します。

skip_mail: on
demo_mode: on

4. 送信エラーを記録する

mail_failed になる場合は、WordPress がメール送信に失敗したときに実行する wp_mail_failed フックで、エラーの内容を記録します。子テーマの functions.php か、Code Snippets などのプラグインに追加します。

<?php
// WordPress のメール送信が失敗したら、理由を PHP のエラーログに書く
add_action( 'wp_mail_failed', function ( WP_Error $error ) {
	error_log( 'wp_mail failed: ' . $error->get_error_message() );
} );

// Contact Form 7 の送信が失敗したら、フォーム名と ID を記録する
add_action( 'wpcf7_mail_failed', function ( $contact_form ) {
	error_log( sprintf( 'CF7 mail failed: "%s" (ID %d)', $contact_form->title(), $contact_form->id() ) );
} );

error_log() の書き込み先はサーバーの PHP の設定によります。wp-config.php で WP_DEBUG と WP_DEBUG_LOG を true にしておくと、wp-content/debug.log に書かれます。調べ終わったら元に戻します。

Could not instantiate mail function. のように記録される場合は、サーバーの PHP からメールを送る仕組み(mail() 関数や sendmail)が使えないか制限されています。この場合は5の SMTP での送信に切り替えます。

CF7 のフォームを通さずに、WordPress のメール送信だけを試すこともできます(WP-CLI が使える場合)。bool(true) なら WordPress は送り出せています。

wp eval 'var_dump( wp_mail( "you@example.com", "送信テスト", "WordPress からのテストメールです。" ) );'

5. SMTPで送信する

mail_sent なのに届かない、または mail_failed が続く場合は、メールの送信を SMTP に切り替えます。WordPress は初期設定ではサーバーの PHP の mail() 関数で送るため、サーバーによっては迷惑メールと判定されやすくなります。契約しているメールサーバーや、メール送信サービスの SMTP を通すと、送信元のドメインの認証(SPF・DKIM)と組み合わせられ、届きやすくなります。

主な方法は次の2つです。

  • SMTP プラグインを使う: WP Mail SMTP(wp-mail-smtp)、FluentSMTP(fluent-smtp)などで、SMTP サーバーの情報を画面から設定します。違いは「WordPressのSMTPプラグイン比較」にまとめています。
  • プラグインを使わずに設定する: phpmailer_init フックで WordPress のメール送信(PHPMailer)を SMTP に切り替えます。
<?php
// wp-config.php に SMTP_HOST・SMTP_USER・SMTP_PASS を define しておく
add_action( 'phpmailer_init', function ( PHPMailer\PHPMailer\PHPMailer $phpmailer ) {
	$phpmailer->isSMTP();
	$phpmailer->Host       = SMTP_HOST;
	$phpmailer->Port       = 587;
	$phpmailer->SMTPAuth   = true;
	$phpmailer->SMTPSecure = 'tls'; // 587 番ポートで STARTTLS を使う
	$phpmailer->Username   = SMTP_USER;
	$phpmailer->Password   = SMTP_PASS;
} );

SMTP サーバーのホスト名・ポート・認証の方法は、契約しているサーバー会社やメール送信サービスの説明書で確認します。Gmail の SMTP を使う場合は、Google アカウントで2段階認証を有効にし、アプリパスワードを作って使います。設定の手順と主なサービスの接続情報は「WordPressのメールをSMTP送信に変更する方法」で説明しています。

6. 送信元ドメインのSPF・DKIM・DMARCを確認する

受信側のメールサーバーは、送信元のドメインの DNS に登録された SPF・DKIM・DMARC を見て、そのメールが正規のサーバーから送られたかを判断します。Gmail の送信者ガイドラインでは、Gmail 宛てにメールを送るすべての送信者に SPF か DKIM の設定を求めています。

# SPF(TXT レコードの v=spf1 で始まる値)
dig +short TXT example.com

# DMARC
dig +short TXT _dmarc.example.com

SPF に、メールを送り出すサーバー(Web サーバーやメール送信サービス)が含まれていないと、迷惑メールと判定されやすくなります。何を追加するかは、サーバー会社やメール送信サービスの説明書に書かれています。

届いたメールの「メッセージのソースを表示」(Gmail の場合)で、spf=pass・dkim=pass になっているかも確認できます。

7. 受け取ったメッセージをサイトにも保存する

メールが届かなくても問い合わせを失わないように、CF7 の作者が配布している「Flamingo」プラグインを入れておくと、送信された内容が管理画面にも保存されます。原因を調べている間の取りこぼしを防げます。

注意点

  • メールが届かないときは、まず受信側の迷惑メールフォルダーを確認します。会社のメールでは、受信サーバー側で隔離されていることもあるので、管理者に確認します。
  • SMTP のパスワードや API キーは、テーマのファイルに直接書かず、wp-config.php の定数か SMTP プラグインの設定で管理します。
  • フォームの送信先を [your-email] などの入力値にすると、第三者に迷惑メールを送る踏み台に使われることがあります。送信先は自分のアドレスにし、問い合わせた人への自動返信はメール (2) で、内容を最小限にして送ります。
  • フォームのメッセージ(送信完了・失敗の文言)を変えたい場合は「Contact Form 7のエラーメッセージを変更する方法」を参照してください。

お気軽にご相談ください

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