我正在尝试使用一个代码通过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封。感谢任何帮助:)谢谢!
答案 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运行它,其中超时不是问题。