使用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
相关产品推荐
相关产品推荐

