You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wp_mail函数批量发邮件:占位符替换难题

WordPress批量Bcc邮件的个性化变量替换方案

普通Bcc批量发送只能推送同一内容的邮件,要给每个收件人替换{{user_name}}这类变量,又不想把wp_mail塞进foreach循环,可以通过WordPress的phpmailer_init钩子接管PHPMailer的发送流程来实现,具体操作如下:

步骤1:筛选目标用户并准备原始内容

// 筛选需要发送的用户(排除管理员)
$target_users = array_filter($users, function($user) {
    return $user->roles[0] !== 'administrator';
});

// 原始邮件主题和带变量的内容
$subject = "你的专属通知";
$original_message = "你好,{{user_name}}!这是为你定制的邮件内容。";
$headers = ['From: noreply@test.com'];

步骤2:利用钩子实现个性化批量发送

// 通过phpmailer_init钩子接管发送逻辑
add_action('phpmailer_init', function($phpmailer) use ($target_users, $subject, $original_message) {
    // 清空wp_mail默认初始化的收件人、主题和内容
    $phpmailer->ClearAllRecipients();
    $phpmailer->Subject = '';
    $phpmailer->Body = '';

    // 遍历每个用户生成个性化邮件
    foreach ($target_users as $user) {
        // 替换邮件变量
        $personalized_msg = str_replace(
            ['{{user_name}}'],
            [$user->user_login],
            $original_message
        );

        // 添加当前用户为Bcc收件人
        $phpmailer->AddBcc($user->user_email);
        // 设置当前用户的个性化主题和内容
        $phpmailer->Subject = $subject;
        $phpmailer->Body = $personalized_msg;

        // 发送当前用户的邮件
        $phpmailer->Send();
        // 清空Bcc列表,准备下一个用户
        $phpmailer->ClearBccs();
    }

    // 阻止wp_mail默认的发送动作,避免重复发送
    add_filter('wp_mail', fn() => false);
});

// 触发wp_mail(实际发送逻辑在钩子中执行)
wp_mail('', $subject, $original_message, $headers);

原理说明

这个方法通过钩子接管了PHPMailer实例,在后台循环生成个性化邮件并以Bcc方式发送,既不用在业务代码里写foreach包裹wp_mail,又能保证每个收件人看到专属内容,同时保留Bcc的隐私特性(收件人看不到其他收件人地址)。

内容的提问来源于stack exchange,提问作者Luisana Mora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:13:25