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のセキュリティ対策の基本設定。