使用模板引擎渲染个性化内容并结合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' => ['手机', '充电器']]);登录后复制将模板文件分离后还可提高复用性,只需传入不同数据即可生成千人千面的内容。
Mootion Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。
177 查看详情
基于 SMTP 的邮件发送与并发控制
发送邮件建议使用 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 服务商限流。必须进行流量控制。
常用策略包括:
分批处理:每次处理 50~100 封,结合数据库标记已发送状态 延迟发送:每发送几封后 sleep(1),降低请求频率 队列机制:将待发任务写入 Redis 或数据库,由后台 Worker 异步消费简单实现一个可控的发送批次:
\$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";登录后复制优化建议与注意事项
始终验证邮箱格式,减少无效投递 记录发送日志,便于追踪失败原因 设置超时时间(\$mail->Timeout = 10)防止卡死 使用专用 SMTP 账户,并开启独立密码 遵守反垃圾邮件规范,提供退订链接基本上就这些。合理组合模板渲染与受控发送流程,就能稳定实现个性化群发功能。不复杂但容易忽略细节。
以上就是php如何批量发送个性化邮件_php模板引擎替换变量与smtp并发发送控制的详细内容,更多请关注php中文网其它相关文章!
