7

我正在使用 php 和 mysql。

我将发送 10k++(一万多封)电子邮件来更新我的订阅者,这是我第一次发送它们。我将使用 php 邮件功能,基本上这是我要做的:

首先从数据库中获取数据:

Select name, email FROM data

之后,使用 while 循环发送数据:

while($r = mysql_fetch_assoc($exe)){
    ...
    if($mail){
        echo "success<br>";
    } else {
        echo "failed<br>";
    }
}
echo "Sent all";

我包括 if.. else 语句,以确保每封电子邮件都发送成功。我有什么需要照顾的吗?发送给 10K++ 用户时我会有什么问题吗?

您要发送的电子邮件数量是否有限制?

4

5 回答 5

10

请注意邮件文档中的此注释:

注意:值得注意的是,mail() 函数不适合循环处理大量电子邮件。此函数为每封电子邮件打开和关闭一个 SMTP 套接字,效率不高。
如需发送大量电子邮件,请参阅 » PEAR::Mail 和 » PEAR::Mail_Queue 包。

于 2009-10-09T11:09:56.753 回答
6

邮件数量没有限制,但是 PHP 脚本有时间限制。查看 php.ini 中设置的max_execution_time,通常为 20 或 30 秒。如果您不知道,请使用 phpinfo() 找出答案。

此外,您应该采取一些措施来防止用户收到过多的电子邮件。您应该将它们标记为已发送,这样如果您不小心启动了两次脚本,它们就不会收到重复的帖子。

除此之外,您应该注意 php 的邮件功能本质上根本没有优化。您可以尝试一些库,如 phpmimemessage 或任何其他库,这将允许您进行一些缓存,例如,在许多其他功能中。

于 2009-10-09T11:06:36.137 回答
2

您应该建立一个发送/失败的电子邮件队列,这样您就可以尝试重新发送失败的尝试,并避免在出现问题时重新发送电子邮件。

不要创建一个尝试通过 mail() 发送 10k 封电子邮件的循环

此外,您最有可能遇到的限制是您的 ISP 或主机的邮件服务器。

于 2009-10-09T11:22:21.453 回答
0

您可以使用 pear::Mail_Queue http://pear.php.net/package/Mail_Queue/

它真的会做得很好。

于 2009-10-09T11:16:19.637 回答
0

您可能还想看看设置一个“真正的”邮件列表工具,例如mailman,或者至少使用别名组(如果可能的话)。

此外,请参阅有关 serverfault 的相关问题:https ://serverfault.com/questions/67154/sending-an-email-to-about-10k-users-not-spam ,其中提到了PHPlist以及其他问题。在这里 - https://serverfault.com/questions/68357/whats-the-best-way-to-send-bulk-email

于 2009-10-09T11:45:04.123 回答