使用PHPMailer的多个电子邮件

时间:2015-08-06 12:17:22

标签: php email 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封。感谢任何帮助:)谢谢!

3 个答案:

答案 0 :(得分:2)

在打开foreach循环后添加以下代码行

set_time_limit(60);

使用这行代码,您可以为每封邮件发送60秒。这个数字可以高到你想要的数量。但我应尽量保持尽可能低

每次运行此代码时,您都会将时间限制重置为60秒。将其重置为零。

答案 1 :(得分:2)

这可能会解决您的问题,无需克隆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;
}

答案 2 :(得分:0)

将您的代码基于the mailing list example provided with PHPMailer。通常,您不希望通过Web服务器在页面加载时执行此类操作 - 从cron运行它,其中超时不是问题。