使用 PHP 发送群发邮件时,最好向每个订阅者发送一封电子邮件(通过所有电子邮件地址运行 for 循环),还是最好将所有在 BCC 中的逗号分隔列表中添加,从而仅发送一封电子邮件?
谢谢你。
使用 PHP 发送群发邮件时,最好向每个订阅者发送一封电子邮件(通过所有电子邮件地址运行 for 循环),还是最好将所有在 BCC 中的逗号分隔列表中添加,从而仅发送一封电子邮件?
谢谢你。
密件抄送字段中的地址数量很有可能在 SMTP 服务器上受到限制(以避免垃圾邮件)。我会选择安全路线并向每个订阅者发送电子邮件。如果需要,这也将允许您为每个订阅者自定义电子邮件。
另请注意,mail() 可能不是发送批量邮件的最佳方式(因为每次调用它都会打开与 SMTP 服务器的新连接)。您可能想查看PEAR::Mail。
正如其他人所说,每个收件人一封邮件更合适。
如果你想要一个图书馆为你做肮脏的工作,试试 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
最佳做法是为每个收件人发送一封电子邮件。
如果它是一个 linux 邮件服务器,它可以处理大量的吞吐量,所以除非它是一个垃圾服务器,否则容量应该不是问题!
如果它是一个共享的网络服务器,您的主机可能会不高兴 - 如果是这种情况,我会将它分成块并传播发送。如果它是专用的,那么就按照你的意愿去做:)
如果某个密件抄送收件人的发送过程由于某种原因失败(示例原因可能是我无法解析的域),则整个操作将被取消(在 99% 的情况下这是不受欢迎的行为)。
我在 PHP 循环中发送电子邮件,即使其中一封电子邮件发送失败,也会发送其他电子邮件。