如何让网站联系表单发送邮件至多个收件人且彼此不可见
解决PHP联系表单发送至多个收件人且隐藏其他邮箱的方案
嘿,刚好之前我也遇到过类似需求,给你两种靠谱的解决方案,都能实现「给多个收件人发邮件但彼此看不到对方邮箱」的效果,你可以根据自己的场景选:
方法一:使用BCC(盲抄送)
这是最高效的方式,利用邮件协议里的**盲抄送(BCC)**字段,所有被添加到BCC的收件人不会出现在其他收件人的邮件列表里。
修改后的完整代码示例:
<?php // 先判断表单是否提交 if (isset($_POST['submit'])) { // 获取表单字段并去除首尾空格 $name = trim($_POST['name']); $email = trim($_POST['email']); $message = trim($_POST['message']); // --- 核心:定义多个收件人邮箱 --- // 用逗号分隔多个邮箱,注意格式统一(逗号后可加空格) $bccRecipients = 'email1@yourdomain.com, email2@yourdomain.com, email3@yourdomain.com'; // 邮件基本配置 $subject = "网站联系表单提交 - {$name}"; // 构建邮件头 $headers = "From: {$name} <{$email}>\r\n"; $headers .= "Reply-To: {$email}\r\n"; // 添加BCC头,这是隐藏收件人的关键 $headers .= "BCC: {$bccRecipients}\r\n"; // 设置邮件编码和HTML格式(支持富文本内容) $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; // 发送邮件:第一个参数可留空(依赖BCC收件),也可填主收件人(比如你的个人邮箱) $isSent = mail('', $subject, $message, $headers); // 反馈结果 if ($isSent) { echo "<p style='color:green;'>感谢你的留言,我们会尽快回复你!</p>"; } else { echo "<p style='color:red;'>邮件发送失败,请稍后重试或联系网站管理员。</p>"; } } ?>
关键点说明:
- BCC字段的多个邮箱必须用逗号分隔(逗号后可加空格,服务器能识别)
mail()函数的第一个收件人参数可留空,所有实际收件人都通过BCC传递;若需要一个“明面上”的收件人(比如你自己),直接填入即可,不影响隐藏效果
方法二:循环逐个发送邮件
如果你的服务器对BCC的收件人数量有限制,或者需要给不同收件人发送个性化内容,可以用循环逐个发送。这种方式每个收件人收到的都是单独的邮件,完全看不到其他收件人。
代码示例:
<?php if (isset($_POST['submit'])) { $name = trim($_POST['name']); $email = trim($_POST['email']); $message = trim($_POST['message']); // --- 核心:把收件人放进数组 --- $recipients = [ 'email1@yourdomain.com', 'email2@yourdomain.com', 'email3@yourdomain.com' ]; $subject = "网站联系表单提交 - {$name}"; $headers = "From: {$name} <{$email}>\r\n"; $headers .= "Reply-To: {$email}\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $allSentSuccess = true; // 遍历每个收件人,单独发送邮件 foreach ($recipients as $toEmail) { if (!mail($toEmail, $subject, $message, $headers)) { $allSentSuccess = false; break; // 有一个失败就停止循环,避免无效尝试 } } // 反馈结果 if ($allSentSuccess) { echo "<p style='color:green;'>感谢你的留言,我们会尽快回复你!</p>"; } else { echo "<p style='color:red;'>部分邮件发送失败,请稍后重试或联系网站管理员。</p>"; } } ?>
额外注意事项
- 一定要做表单验证:上面的代码加了
trim()处理字段,但还可以补充格式验证,防止垃圾提交:
// 在获取字段后添加验证逻辑 if (empty($name) || empty($email) || empty($message)) { echo "<p style='color:red;'>请填写所有必填字段!</p>"; exit; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "<p style='color:red;'>请输入有效的邮箱地址!</p>"; exit; }
- 避免邮件被当成垃圾邮件:确保
From头的邮箱是服务器认可的域名邮箱(比如你的网站域名后缀),不要用免费邮箱作为发件人,否则容易被邮件服务商拦截。 - 如果mail()函数不稳定:可以考虑用PHPMailer或SwiftMailer这类第三方库,它们支持SMTP协议,发送成功率更高,处理多个收件人也更灵活。
内容的提问来源于stack exchange,提问作者oncent design
相关产品推荐
相关产品推荐

