2026年5月20日

2026年5月20日

WordPressのwp_mail()関数の使い方と活用方法

はじめに

wp_mail() はWordPress標準のメール送信関数です。PHPMailerをラップしており、フィルタフックで送信設定を細かく制御できます。プラグインやテーマからプログラムでメールを送信する場合に使用します。

基本的な使い方

// 最もシンプルなメール送信
wp_mail(
    'recipient@example.com',          // 送信先
    'メールの件名',                    // 件名
    'メール本文のテキストです。'       // 本文
);

解決手順

ステップ1:HTMLメールを送信する

// functions.php — HTMLメールを送信
$to      = 'user@example.com';
$subject = '注文確認';
$headers = ['Content-Type: text/html; charset=UTF-8'];
$message = '
<html>
<body>
  <h1>ご注文ありがとうございます</h1>
  <p>注文番号: <strong>#12345</strong></p>
  <p>合計金額: ¥3,000</p>
</body>
</html>';

wp_mail($to, $subject, $message, $headers);

ステップ2:複数の宛先・CC・BCCを設定する

// 複数宛先・CC・BCC・カスタムFrom
$to      = ['user1@example.com', 'user2@example.com'];
$subject = 'お知らせ';
$message = 'サイトからのお知らせです。';
$headers = [
    'Content-Type: text/html; charset=UTF-8',
    'From: サイト名 <noreply@example.com>',
    'Cc: admin@example.com',
    'Bcc: log@example.com',
    'Reply-To: support@example.com',
];

wp_mail($to, $subject, $message, $headers);

ステップ3:添付ファイルを送信する

// 添付ファイル付きメール
$attachment = [
    get_attached_file(123),                    // メディアIDから取得
    WP_CONTENT_DIR . '/uploads/report.pdf',   // パスで直接指定
];

wp_mail(
    'user@example.com',
    '月次レポート',
    '添付のレポートをご確認ください。',
    ['Content-Type: text/plain; charset=UTF-8'],
    $attachment
);

ステップ4:エラーハンドリング

// wp_mail_failed フックでエラーをキャッチ
add_action('wp_mail_failed', function(WP_Error $error) {
    // エラーをログに記録
    error_log('[wp_mail error] ' . $error->get_error_message());

    // 管理者に通知(wp_mail は使えないので error_log のみ推奨)
});

// 送信成功の確認
$sent = wp_mail('user@example.com', '件名', '本文');
if (!$sent) {
    // 送信失敗時の処理
    error_log('メール送信に失敗しました');
}

ステップ5:wp_mailフィルタで送信内容を動的に変更する

// 特定条件でメール内容を変更
add_filter('wp_mail', function($args) {
    // テスト環境では実際の宛先に送らない
    if (defined('WP_ENV') && WP_ENV === 'staging') {
        $args['to']      = 'dev-team@example.com';
        $args['subject'] = '[STAGING] ' . $args['subject'];
    }
    return $args;
});

wp_mail() のシグネチャ

wp_mail(
    string|string[] $to,        // 送信先メールアドレス
    string          $subject,   // 件名
    string          $message,   // 本文
    string|string[] $headers,   // ヘッダー(省略可)
    string|string[] $attachments // 添付ファイルパス(省略可)
): bool

注意事項

  • wp_mail() の戻り値は true でも実際に配信されるとは限りません。SMTPサーバーへの投入成功を示すだけです
  • HTMLメールを送信する場合は必ず Content-Type: text/html; charset=UTF-8 ヘッダーを追加してください
  • 大量送信には wp_mail() は適していません。SendGrid・Mailgun等のバッチ送信APIを使用してください

まとめ

wp_mail($to, $subject, $message, $headers, $attachments) の5引数を覚えるだけで基本的なメール送信ができます。HTMLメールは Content-Type: text/html ヘッダーを追加し、エラーは wp_mail_failed フックで記録してください。

お気軽にご相談ください

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