2026年7月9日

2026年7月9日

WordPressのメール送信が届かない場合の解決方法・SMTP設定手順

はじめに

「お問い合わせフォームのメールが届かない」「パスワードリセットメールが来ない」——WordPressのメール送信問題はSMTP設定で大半が解決できます。wp_mail()の仕組みとSMTP設定を解説します。

症状・原因

WordPressは初期設定でPHPのmail()関数を使ってメールを送信します。共有ホスティングではmail()が制限されていたり、From アドレスが正しくないためスパム判定を受けたりします。SMTPを使って認証付きでメールを送信することで解決できます。

解決手順

ステップ1:メール送信の問題を診断する

# WP-CLIでテストメールを送信
wp eval 'wp_mail("test@example.com", "テストメール", "WordPressからのテストです");'

# メール設定を確認
wp eval '
$mailer = PHPMailer\PHPMailer\PHPMailer::class;
echo "PHPMailer利用可能\n";
echo "PHP mail(): " . (function_exists("mail") ? "有効" : "無効") . "\n";
'
// テストメール送信関数
function test_wp_mail() {
    $result = wp_mail(
        get_option( 'admin_email' ),
        'WordPress メール送信テスト',
        'このメールが届いていればwp_mail()は正常に動作しています。',
        [ 'Content-Type: text/html; charset=UTF-8' ]
    );
    return $result ? '送信成功' : '送信失敗';
}

ステップ2:WP Mail SMTPをインストールする

# WP Mail SMTPをインストール
wp plugin install wp-mail-smtp --activate

# 設定確認
wp option get wp_mail_smtp
WP Mail SMTPの設定手順:
  WP Mail SMTP → 設定
  
  差出人メールアドレス: noreply@yourdomain.com
  差出人名: サイト名
  
  メーラーを選択:
    → Gmail(OAuth2、無料)
    → SendGrid(APIキー方式)
    → Amazon SES(大量送信向け)
    → Outlook / Microsoft 365
    → その他のSMTP(汎用)

ステップ3:Gmailアプリパスワードで設定する

Gmail SMTP設定(アプリパスワード方式):
  Googleアカウント → セキュリティ
  → 2段階認証を有効化
  → アプリパスワードを生成(「メール」「Windowsコンピュータ」)
  → 生成された16桁のパスワードをメモ

WP Mail SMTP設定:
  メーラー: その他のSMTP
  SMTPホスト: smtp.gmail.com
  暗号化: TLS
  SMTPポート: 587
  SMTPユーザー名: yourname@gmail.com
  SMTPパスワード: (16桁のアプリパスワード)

ステップ4:コードでSMTPを設定する(プラグイン不使用)

// functions.phpでSMTPを直接設定
add_action( 'phpmailer_init', function( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'smtp.gmail.com';
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Port       = 587;
    $phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
    $phpmailer->Username   = defined( 'SMTP_USER' ) ? SMTP_USER : '';
    $phpmailer->Password   = defined( 'SMTP_PASS' ) ? SMTP_PASS : '';
    $phpmailer->From       = 'noreply@yourdomain.com';
    $phpmailer->FromName   = get_bloginfo( 'name' );
} );
// wp-config.phpで認証情報を定義(ハードコーディングを避ける)
define( 'SMTP_USER', 'yourname@gmail.com' );
define( 'SMTP_PASS', 'your-app-password' );

// 本番環境では環境変数から読み込む
define( 'SMTP_USER', getenv( 'WP_SMTP_USER' ) );
define( 'SMTP_PASS', getenv( 'WP_SMTP_PASS' ) );

ステップ5:メール送信失敗時のデバッグ

// メール送信失敗時にエラーを記録
add_action( 'wp_mail_failed', function( $wp_error ) {
    error_log( 'wp_mail失敗: ' . $wp_error->get_error_message() );

    // 管理者にアラートを送信(別の方法で)
    // Slack通知やログファイルへの書き込みなど
} );

// SMTPのデバッグ出力を有効化(開発環境のみ)
add_action( 'phpmailer_init', function( $phpmailer ) {
    if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
        $phpmailer->SMTPDebug = 2; // 0:なし 1:クライアント 2:クライアント+サーバー
        $phpmailer->Debugoutput = function( $str ) {
            error_log( 'SMTP: ' . $str );
        };
    }
} );
# WP-CLIでメール送信ログを確認
wp eval '
add_action("wp_mail_failed", function($e) {
    echo $e->get_error_message() . "\n";
});
$result = wp_mail("test@example.com", "テスト", "本文");
echo $result ? "成功\n" : "失敗\n";
'

注意事項

  • Gmailのアプリパスワードは1日あたりの送信制限(約500通)があります。大量のメール(ニュースレター等)にはSendGrid・Amazon SES・Mailgunなどの専用メール配信サービスを使用してください。
  • SMTP認証情報(ユーザー名・パスワード)はwp-config.phpまたは環境変数で管理し、コード中にハードコーディングしないでください。Gitリポジトリへの流出を防ぎます。
  • メールが届かない場合、受信側のスパムフォルダも確認してください。SPFレコード・DKIMレコードがDNSに設定されていないとスパム判定を受けやすくなります。

まとめ

WordPressのメール送信問題は「wp_mail_failedでエラー確認→WP Mail SMTPインストール→Gmail/SendGridのSMTP設定→SPF/DKIMのDNS設定」の流れで解決できます。大量送信が必要な場合はSendGrid等の専用サービスを選択しましょう。関連記事:WordPressでお問い合わせフォームを作成する方法WordPressのセキュリティ対策の基本設定

お気軽にご相談ください

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