使用php邮件功能时有限制吗?

时间:2009-10-09 11:04:25

标签: php email send

我正在使用php和mysql。

我将发送10k ++(10万多封)电子邮件来更新我的订阅者,这是我第一次发送它们。我将使用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 ++用户时会有任何问题吗?

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

5 个答案:

答案 0 :(得分:10)

请注意mail documentation

中的这条说明
  

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

答案 1 :(得分:5)

电子邮件号码没有限制,但PHP脚本有时间限制。请参阅php.ini中的max_execution_time设置,通常为20或30秒。如果您不知道,请使用phpinfo()找出它。

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

它确实会做得很好。

答案 4 :(得分: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