php脚本在发送电子邮件时很慢

时间:2011-11-01 19:19:07

标签: php html-email

我正在运行这个脚本,它适用于一个上下文,但是当我在4个收件人上尝试这个时,它只是显示此错误:

Fatal error: Maximum execution time of 30 seconds exceeded in D:\Hosting\8011955\html\admin\newsletter.php on line 60

如何改进此代码?我只想发送不超过200封的电子邮件。

这是代码:

if(!(is_array($errors)))
{
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= "From: \"".$from_name."\" <".$from_email.">\n";

    $query="SELECT email From newsletter WHERE visible='1'";
    $result=mysql_query($query) or mysql_error();
    while($rowdata=mysql_fetch_array($result))
    {
       $headers .= "To: \"".$to_name."\" <".$rowdata['email'].">\n";    
           mail($rowdata['email'], "$sub",$message, $headers);
    }   
}

3 个答案:

答案 0 :(得分:2)

newsletter表中有多少匹配的行?

顺便说一下,代码中存在逻辑错误 - 每次循环都会添加一个新的To:字段,因此第一封邮件将转到:

To: user1@example.com

第二个将转到:

To: user1@example.com
To: user2@example.com

这将导致user1@example.com收到邮件列表中每个人的一条消息,user2@example.com收到少一条消息,依此类推。不要这样做。 :)

答案 1 :(得分:1)

在函数开头放下一行。

set_time_limit(0);

这有助于运行需要在未知时间执行的脚本。

答案 2 :(得分:1)

默认情况下,PHP脚本运行30秒然后停止。此值由php.ini中的max_execution_time值控制。您可以通过调用set_time_limit()函数在当前脚本中覆盖此值。每次调用set_time_limit()时,脚本执行计时器都会从零开始。因此,您可以将其放在while {}循环中,以便为您的脚本提供所需的时间。

while($rowdata=mysql_fetch_array($result))
{
   set_time_limit(30); // Reset script timer and give script 30 seconds to send the next email
   $headers .= "To: \"".$to_name."\" <".$rowdata['email'].">\n";    
   mail($rowdata['email'], "$sub",$message, $headers);
}
相关问题