当尝试使用phpmailer发送超过200封电子邮件时,只发送前150封电子邮件并获得“内部服务器错误”

时间:2015-02-24 16:43:14

标签: php email phpmailer

我的代码从数据库收到电子邮件,并使用循环向其发送电子邮件。 如果我以25个为一组发送电子邮件,它正常工作,但当表格超过200或300封电子邮件时,我在屏幕上收到此错误,只发送150封第一封电子邮件:

“内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

请与服务器管理员webmaster@xxx.com联系,告知他们错误发生的时间,以及可能导致错误的任何操作。

服务器错误日志中可能提供了有关此错误的更多信息。

此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。“

我检查了我的服务器错误日志并且是空的,我认为不是托管smtp限制问题。

有些事情我做错了吗?

编辑: 加载网络后错误发生30秒。

服务器处于安全模式=关闭

我用:

ini_set('max_execution_time',300);

我也在循环内添加:

参数或者set_time_limit(3);

但错误仍然是30秒。

代码:

require '../phpmailer/PHPMailerAutoload.php';
@MYSQL_CONNECT("xxx","xxx","xxx");
@mysql_select_db("xxx");
$query  = "SELECT * FROM users";
$result = @MYSQL_QUERY($query);
while ($row = mysql_fetch_array ($result)) {
    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->Host = 'smtp.xxx.com';
    $mail->SMTPAuth = true;
    $mail->SMTPKeepAlive = true;
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    $mail->Username = 'xxx@xxx.com';
    $mail->Password = 'xxx';
    $mail->From = 'xxx@xxx.com';
    $mail->FromName = 'xxx@xxx.com';
    $mail->AddAddress($row["mail"]);
    $mail->Subject = 'xxx';
    $mail->Body = 'Hello World';
    $mail->IsHTML(true);
    $mail->CharSet = 'UTF-8';
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent to ".$row["mail"];
    }
}

非常感谢。

2 个答案:

答案 0 :(得分:1)

在发送批量电子邮件之间进行休眠(您可能达到每秒最大发送限制)。还要尝试捕获每次尝试发送,并记录异常。也许你的电子邮件地址不好。

$ mail构造函数可能应该在循环之外,并启用异常。只需创建一个对象并重复使用它。

答案 1 :(得分:1)

您在此代码中丢失了大量性能,并因此使用过多的连接。尝试从PHPMailer提供的the example mailing list code开始。您的PHPMailer可能也需要更新。

您正在使用已弃用的mysql_*函数 - 请改用mysqli或PDO。

错误可能是一个简单的时间或内存限制 - 检查php.ini中的max_execution_timememory_limit设置 - 但您确实需要查看服务器日志以找出原因。如果没有,你可以暂时启用错误输出。