使用 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。
我正在尝试使用一个代码通过 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。