使用 PHPMailer 发送多个电子邮件

Multiple Emails with PHPMailer

我正在尝试使用一个代码通过 SMTP 使用 PHPMailer 向多个不同身体的人发送电子邮件。我的代码如下:

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{   
require_once("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth   = true;                
$mail->Host       = "xxxxxxxx"; 
$mail->SetFrom('xx@xxx.com');
$mail->Subject    = "System Change";

$add = array("a", "b", "c");
foreach ( $add as $address ) {
$current = clone $mail;
if ( $address == 'a' ) 
{
    $current->AddAddress('xx@xx.com');
    $current->MsgHTML("Message1");
    $current->send();
} 
if ( $address == 'b' ) 
{
    $current->AddAddress('xx@xx.com');
    $current->MsgHTML("Message2");
    $current->send(); 
}
if ( $address == 'c' ) 
{
    $current->AddAddress('xx@xx.com');
    $current->MsgHTML("Message3");
    $current->send(); 
}
}
exit;
if($mail->Send())
{ echo "SUCCESSFUL"; }
else echo "ERROR IN SENDING MAILS";
exit;
}
?>

问题是正在发送邮件但只发送了前 2 封邮件,然后显示超时错误。是否有任何我需要更改的设置或我的代码有问题?以多种方式对其进行了编辑,但最终只发送了 2 封邮件,而不是 3 封。感谢任何帮助 :) 谢谢!

在foreach循环开启后添加如下代码行

set_time_limit(60);

使用这行代码,您可以为每封邮件提供 60 秒的发送时间。这个数字可以是你想要的那么高。但我应该尽量降低它

每当这段代码 运行 时,您都将时间限制重置为 60 秒。将其重置为零。

这可能会解决您的问题,无需克隆 PHPMailer 对象。

我已经使用这种方法一次发送了数百封电子邮件,没有出现超时问题。

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{   
    set_time_limit(120);
    require_once("class.phpmailer.php");
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth   = true;                
    $mail->Host       = "xxxxxxxx"; 
    $mail->SetFrom('xx@xxx.com');
    $mail->IsHTML(true);
    $mail->Subject    = "System Change";

    $add = array("a", "b", "c");

    foreach ( $add as $address ) {
        $mail->clearAttachments();
        $mail->clearAllRecipients();

        if ( $address == 'a' ) 
        {
            $mail->AddAddress('xx@xx.com');
            $mail->Body("Message1");
            $mail->send();
        } 
        if ( $address == 'b' ) 
        {
            $mail->AddAddress('xx@xx.com');
            $mail->Body("Message2");
            $mail->send(); 
        }
        if ( $address == 'c' ) 
        {
            $mail->AddAddress('xx@xx.com');
            $mail->Body("Message3");
            $mail->send(); 
        }
    }

    if($mail->send()) echo "SUCCESSFUL";
    else echo "ERROR IN SENDING MAILS";

    exit;
}

您的代码基于 the mailing list example provided with PHPMailer。通常,您永远不想在通过 Web 服务器加载页面时做这种事情 - 运行 它来自超时不是问题的 cron。