You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让网站联系表单发送邮件至多个收件人且彼此不可见

解决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>";
    }
}
?>

额外注意事项

  1. 一定要做表单验证:上面的代码加了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;
}
  1. 避免邮件被当成垃圾邮件:确保From头的邮箱是服务器认可的域名邮箱(比如你的网站域名后缀),不要用免费邮箱作为发件人,否则容易被邮件服务商拦截。
  2. 如果mail()函数不稳定:可以考虑用PHPMailer或SwiftMailer这类第三方库,它们支持SMTP协议,发送成功率更高,处理多个收件人也更灵活。

内容的提问来源于stack exchange,提问作者oncent design

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:16:31