PHP电子邮件发送BCC

27

我知道有一些类似的问题,但是我就是无法让它工作。

好吧,我有一个从我的数据库中获取的电子邮件列表,存在变量$ emailList中。 如果我将变量放在$to部分,我可以让我的代码从表单发送电子邮件, 但我无法使用密送副本(bcc)。我甚至添加了一个电子邮件到$to中,以防万一,但这没有任何影响。

这是我的代码:

$to = "name@mydomain.com";
$subject .= "".$emailSubject."";
$headers .= 'Bcc: $emailList';
$headers = "From: no-reply@thepartyfinder.co.uk\r\n" . "X-Mailer: php";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$message = '<html><body>';
$message .= 'THE MESSAGE FROM THE FORM';

if (mail($to, $subject, $message, $headers)) {
    $sent = "Your email was sent!";
} else {
    $sent = ("Error sending email.");
}

我尝试了这两个代码:

$headers .= 'Bcc: $emailList';

$headers .= 'Bcc: '.$emailList.';

并不是因为邮件没有分开,它们已经被分开了。我知道它们已经被分开了,因为如果我将$emailList放在$to部分中,它就能工作。


我应该补充说明,忽略$message和HTML内容。我没有提供所有内容,这就是为什么代码中缺少它们的原因。


11
你缺少了在BCC头部之后的"\r\n",然后你又在下一行用From覆盖了这些头部信息。 - drew010
我也尝试过使用\r\n。那么我应该把密送抄送放在哪里呢?它需要放在特定的位置吗? - glln
1
@drew010,你的评论应该发布为答案。 - davidethell
@drew010 非常感谢!现在它可以工作了。如果您将其发布为答案,我会接受它。 - glln
@BenToms 不用担心,我有点懒,很高兴你现在解决了它。 - drew010
2个回答

61

您在代码中使用了$headers .= '...';$headers = '...';两行,第二行将覆盖第一行。

只需将$headers .= "Bcc: $emailList\r\n";放在Content-type行之后即可解决问题。

另外需要注意的是,通常需要填写To字段,否则邮件服务器可能会将您的邮件标记为垃圾邮件。

$headers  = "From: no-reply@thepartyfinder.co.uk\r\n" .
  "X-Mailer: php\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "Bcc: $emailList\r\n";

在标头中不指定“收件人”时,我从未遇到过问题。 - Bot
4
我不怀疑这一点。我只是指出有各种各样的邮件服务器和垃圾邮件过滤器,缺失/异常的标题信息的电子邮件通常会得到更高的垃圾邮件评分。 - gregheo

13
你正在设定BCC,但之后用FROM覆盖了这个变量。
$to = "name@mydomain.com";
     $subject .= "".$emailSubject."";
 $headers .= "Bcc: ".$emailList."\r\n";
 $headers .= "From: no-reply@thepartyfinder.co.uk\r\n" .
     "X-Mailer: php";
     $headers .= "MIME-Version: 1.0\r\n";
     $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
 $message = '<html><body>';
 $message .= 'THE MESSAGE FROM THE FORM';

     if (mail($to, $subject, $message, $headers)) {
     $sent = "Your email was sent!";
     } else {
      $sent = ("Error sending email.");
     }

2
\r\n 应该用双引号括起来,否则它会被当做字面量处理。只有 BCC 上的这个有问题。 - drew010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接