0

我有一个邮件功能,它将邮件发送给从数据库中提取的收件人。如何隐藏其他收件人?密件抄送不起作用。邮件来源:

$to=array();
while($row = mysql_fetch_array($subscrquery)) {
    array_push($to, $row['subscr_mail']);
}
$msgheader=$ttl;

$mailheaders  = "MIME-Version: 1.0\r\n";
$mailheaders .= "Content-type: text/html; charset=UTF-8\r\n";
$mailheaders .= "From: ".$sender." <".$sender.">\r\n";
$mailheaders .= "Reply-To: ".$sender." <".$sender.">\r\n";
$mailheaders .= "Bcc: ".implode(',', $to)."\r\n";           
$mailmsga .= stripslashes($mailcontent);
$mailmsg .= strtr($mailmsga, array("<" => "\n<"));
mail(implode(',', $to), $msgheader,$mailmsg,$mailheaders);
4

3 回答 3

3

通常,您希望为每个收件人发送一封电子邮件。发送密件抄送将使您更有可能被垃圾邮件过滤器过滤。

如果您的列表很大,那么您将希望避免使用 PHP 的内置mail方法,因为它会为每封电子邮件打开和关闭一个连接。相反,您应该使用一个 SMTP 电子邮件程序,它只会为所有发送的电子邮件打开一个连接。可能的选项:

大多数较大的框架,如 Zend,可能也有自己的 SMTP 邮件程序。

一般来说,使用现有的包是个好主意,这样您就不必担心标题注入、电子邮件的最大行长等问题。

于 2012-08-07T20:54:35.927 回答
1

你的最后一行有问题:

mail(implode(',', $to), $msgheader,$mailmsg,$mailheaders);

就在那儿,您正在向每个人“发送”电子邮件。BCC 已经处理了。在邮件的第一个参数中使用虚假地址(或您的地址,或其他),它应该可以解决问题。最后一行应该是这样的:

mail('mailer@wherever.com', $msgheader,$mailmsg,$mailheaders);
于 2012-08-07T20:54:46.943 回答
0

只需添加这一行

$headers .= 'To:  Unknown<undefined>' . "\r\n";
于 2012-08-15T10:01:08.303 回答