使用模板引擎渲染个性化内容并结合SMTP批量发送邮件,通过分批处理、延迟和队列机制控制并发,确保高效稳定投递。

在实际项目中,批量发送个性化邮件是常见需求,比如营销推广、通知提醒等。PHP 实现这一功能需要解决两个核心问题:一是如何动态填充模板中的变量生成个性化内容;二是如何通过 SMTP 高效并发发送大量邮件,同时避免服务器被封或性能瓶颈。
为了给每位收件人发送带有其姓名、订单号等信息的定制化邮件,不能直接写死内容,而应采用“模板 + 数据”方式渲染。
最简单的方式是使用原生 PHP 字符串替换,例如:
\$template = "亲爱的{\$name},您的订单 {\$order_id} 已发货,请注意查收。";
\$body = str_replace(['{\$name}', '{\$order_id}'], ['张三', '20231001'], \$template);
对于更复杂的场景,推荐使用轻量级模板引擎如 Twig 或 Plates,它们支持条件判断、循环和过滤器,提升可维护性。
立即学习“PHP免费学习笔记(深入)”;
以 Twig 为例:
require_once 'vendor/autoload.php';
\$loader = new \Twig\Loader\ArrayLoader();
\$twig = new \Twig\Environment(\$loader);
\$templateContent = "亲爱的{{ name }},您购买的 {{ items|join(', ') }} 即将送达。";
\$rendered = \$twig->render(\$templateContent, [
'name' => '李四',
'items' => ['手机', '充电器']
]);
将模板文件分离后还可提高复用性,只需传入不同数据即可生成千人千面的内容。
发送邮件建议使用 PHPMailer 或 Swift Mailer,配合企业邮箱或第三方 SMTP 服务(如阿里云、SendGrid)确保投递率。
示例使用 PHPMailer 发送单封邮件:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
\$mail = new PHPMailer(true);
\$mail->isSMTP();
\$mail->Host = 'smtp.exmail.qq.com';
\$mail->SMTPAuth = true;
\$mail->Username = 'notice@company.com';
\$mail->Password = 'your-smtp-password';
\$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
\$mail->Port = 587;
\$mail->setFrom('notice@company.com', '系统通知');
\$mail->addAddress('user@example.com', '王五');
\$mail->isHTML(true);
\$mail->Subject = '订单更新提醒';
\$mail->Body = \$rendered; // 渲染后的模板
\$mail->send();
一次性发送数千封邮件容易导致内存溢出或触发 SMTP 服务商限流。必须进行流量控制。
常用策略包括:
简单实现一个可控的发送批次:
\$recipients = [
['email' => 'a@ex.com', 'name' => 'A'],
['email' => 'b@ex.com', 'name' => 'B'],
];
\$batchSize = 50;
\$sentCount = 0;
foreach (array_chunk(\$recipients, \$batchSize) as \$batch) {
foreach (\$batch as \$user) {
try {
\$mail = clone \$baseMail; // 注意克隆实例避免冲突
\$mail->clearAddresses();
\$mail->addAddress(\$user['email'], \$user['name']);
\$mail->Body = renderTemplate(\$template, \$user);
\$mail->send();
\$sentCount++;
} catch (Exception \$e) {
error_log("Failed to send to {\$user['email']}: " . \$mail->ErrorInfo);
}
}
// 批次间暂停,减轻服务器压力
sleep(2);
}
echo "共成功发送 {\$sentCount} 封邮件。\n";
基本上就这些。合理组合模板渲染与受控发送流程,就能稳定实现个性化群发功能。不复杂但容易忽略细节。
以上就是php如何批量发送个性化邮件_php模板引擎替换变量与smtp并发发送控制的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号