使用PHP发送群发邮件时,最好是向每个订阅者发送一封电子邮件(在所有电子邮件地址中运行for循环),还是最好只在逗号分隔列表中添加BCC中的所有内容因此只发送一封电子邮件?
谢谢。
答案 0 :(得分:4)
BCC字段中的地址数量很可能在SMTP服务器上受到限制(以避免发送垃圾邮件)。我会选择安全路线并向每个订户发送电子邮件。这样,您还可以根据需要自定义每个订阅者的电子邮件。
另请注意,mail()可能不是发送批量邮件的最佳方式(因为每次调用时都会打开与SMTP服务器的新连接)。您可能需要查看PEAR::Mail。
答案 1 :(得分:1)
最佳做法是每位收件人发送一封电子邮件。
如果它是一个linux邮件服务器,它可以处理大量的吞吐量,所以除非它是垃圾服务器,否则卷不应成为问题!
如果它是一个共享的网络服务器,你的主人可能会不高兴 - 如果是这种情况,我会把它拆分成块并传播发送。如果它是专用的,那么就像你一样:)
答案 2 :(得分:1)
如果由于某种原因发送过程失败(例如原因可能是我无法解析的域),则其中一个BCC收件人将取消整个操作(99%的情况是不需要的行为)。
我在PHP循环中发送电子邮件,即使其中一封电子邮件无法发送,也会发送其他电子邮件。
答案 3 :(得分:1)
正如其他人所说,每个收件人一封邮件更合适。
如果您希望图书馆为您做脏工作,请试试SwiftMailer http://swiftmailer.org
以下是直接来自文档的示例:
require_once 'lib/swift_required.php';
//Create the Transport
$transport = Swift_SmtpTransport::newInstance('localhost', 25);
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
//Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
->setFrom(array('john@doe.com' => 'John Doe'))
->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
->setBody('Here is the message itself')
;
//Send the message
$numSent = $mailer->batchSend($message);
printf("Sent %d messages\n", $numSent);
/* Note that often that only the boolean equivalent of the
return value is of concern (zero indicates FALSE)
if ($mailer->batchSend($message))
{
echo "Sent\n";
}
else
{
echo "Failed\n";
}
*/
它还有一个很好的Antiflood插件:http://swiftmailer.org/docs/antiflood-plugin-howto