PHP内置的mail()函数是很多轻量场景下发送邮件的首选工具,当需要实现给多个收件人发送同一封邮件时,只要掌握正确的地址格式和参数设置方法,就能快速完成需求。

mail()函数多收件人发送的核心规则
mail()函数的第一个参数用来指定收件人地址,要发送给多个收件人时,不能直接用数组传递,而是需要把所有收件人地址用逗号拼接成单个字符串。同时如果需要设置抄送、密送,需要在邮件头中按照标准邮件格式添加对应字段。
基础多收件人发送示例
以下是直接给两个收件人发送纯文本邮件的示例代码:
<?php
// 多个收件人地址用逗号拼接
$to = "user1@ipipp.com,user2@ipipp.com";
// 邮件主题
$subject = "测试多收件人邮件";
// 邮件正文
$message = "这是一封发送给多个收件人的测试邮件";
// 邮件头,设置发件人和内容类型
$headers = "From: sender@ipipp.com\r\n";
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
// 调用mail函数发送
if (mail($to, $subject, $message, $headers)) {
echo "邮件发送成功";
} else {
echo "邮件发送失败";
}
?>带抄送和密送的多收件人场景
如果需要同时设置抄送和密送收件人,只需要在邮件头中添加对应的字段即可,抄送地址用Cc:开头,密送地址用Bcc:开头,多个地址同样用逗号拼接:
<?php // 主要收件人 $to = "main1@ipipp.com,main2@ipipp.com"; // 抄送收件人 $cc = "cc1@ipipp.com,cc2@ipipp.com"; // 密送收件人 $bcc = "bcc1@ipipp.com,bcc2@ipipp.com"; $subject = "带抄送密送的多收件人邮件"; $message = "这封邮件包含主要收件人、抄送和密送收件人"; $headers = "From: sender@ipipp.com\r\n"; $headers .= "Cc: " . $cc . "\r\n"; $headers .= "Bcc: " . $bcc . "\r\n"; $headers .= "Content-type: text/html; charset=utf-8\r\n"; mail($to, $subject, $message, $headers); ?>
注意事项和常见问题
- 收件人地址之间只能用英文逗号分隔,不能使用中文逗号或者空格,否则会导致部分地址无法接收邮件。
- mail()函数依赖服务器本地的邮件发送配置,很多虚拟主机或者默认配置的服务器可能无法正常发送邮件,此时可以考虑使用PHPMailer等第三方库替代。
- 如果要发送HTML格式的邮件,需要在邮件头中设置
Content-type: text/html; charset=utf-8,同时正文可以写HTML标签内容。 - 批量发送大量邮件时,mail()函数效率较低,且容易被判定为垃圾邮件,不建议用于大规模邮件发送场景。
常见问题排查
如果发送多收件人邮件失败,可以先检查以下几点:
- 确认所有收件人地址格式正确,没有多余的空格或者特殊字符。
- 检查服务器是否开启了邮件发送权限,本地开发环境可以配置sendmail或者使用第三方SMTP服务。
- 查看邮件头格式是否正确,每个头字段结尾需要用
\r\n换行,不能遗漏。