2026年5月20日
2026年5月20日
Contact Form 7でメールが届かない場合の解決方法
はじめに
Contact Form 7でフォームを送信しても「メールが届かない」という問題は非常によくあります。WordPressのデフォルトメール送信機能がスパム判定されることが最大の原因で、SMTPを設定することで大半のケースが解決します。
症状・原因
- フォーム送信後に「送信しました」と表示されるがメールが届かない
- 迷惑メールフォルダに入っている
- 送信元メールアドレスがサイトドメインと異なる
- CF7の送信先メールアドレスが間違っている
解決手順
ステップ1:CF7のメール設定を確認する
お問い合わせ → フォームを選択 → 「メール」タブ
- 送信先: admin@example.com(実在するアドレス)
- 送信元: [your-name] <wordpress@example.com>
※ 送信元はサイトのドメインと同じドメインを使うこと
- 返信先: [your-email](フォームのメールアドレスフィールド)
- メール本文: [your-name], [your-email], [your-message] を含むか確認
ステップ2:SMTPプラグインを設定する
# FluentSMTPをインストール(最推奨)
wp plugin install fluent-smtp --activate
# または WP Mail SMTP
wp plugin install wp-mail-smtp --activate
ステップ3:phpmailer_initで直接SMTP設定する
// functions.php
add_action('phpmailer_init', function(PHPMailer\PHPMailer\PHPMailer $phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.sendgrid.net';
$phpmailer->Port = 587;
$phpmailer->SMTPAuth = true;
$phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$phpmailer->Username = 'apikey';
$phpmailer->Password = defined('SENDGRID_API_KEY') ? SENDGRID_API_KEY : '';
});
ステップ4:CF7のメール送信失敗をキャッチする
// functions.php — CF7のメール送信失敗をログに記録
add_action('wpcf7_mail_failed', function(WPCF7_ContactForm $form) {
error_log(sprintf(
'CF7 mail failed: form="%s" id=%d',
$form->title(),
$form->id()
));
});
// wp_mail_failed でSMTPエラーを詳細記録
add_action('wp_mail_failed', function(WP_Error $error) {
error_log('wp_mail error: ' . $error->get_error_message());
error_log('wp_mail data: ' . print_r($error->get_error_data(), true));
});
ステップ5:テスト送信で動作確認する
# WP-CLIでテストメールを送信
wp eval "wp_mail('your@email.com', 'CF7テスト', 'SMTP設定確認');"
# CF7のデバッグログを有効化
wp eval "add_filter('wpcf7_debug', '__return_true');"
注意事項
- CF7の「送信元」に
wordpress@yourdomain.comのようにサーバーに存在しないアドレスを使うとスパム判定されやすくなります - Gmail の SMTP を使う場合はアプリパスワードが必要です(2段階認証を有効にした後に生成)
- SPF・DKIM・DMARC の DNS 設定を行うとメール到達率が大幅に改善します
まとめ
CF7のメール未達は SMTP プラグイン(FluentSMTP 推奨)の導入で解決するケースがほとんどです。wpcf7_mail_failed と wp_mail_failed フックでエラーをログに記録し、原因を特定してください。