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 は、メールの送信に失敗したときと、スパムと判定したときに、どちらも初期設定では同じ「メッセージの送信に失敗しました。後でまたお試しください。」を表示します。どちらなのかは、ブラウザーの開発者ツールで確かめられます。
- フォームのページを開き、開発者ツールの「ネットワーク」タブを開く
- フォームを送信する
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のエラーメッセージを変更する方法」を参照してください。