我长期使用PHPMailer成功发送单个电子邮件。
现在我正在尝试升级我的后台预订系统,以便第二天预订时每天都会向我们的供应商发送。我们每天有大约150-300个预订,而每个预订都需要单独的电子邮件。
我的脚本收到一个预留ID的数组,循环它们并为每个人检索其详细信息,设置html并使用以下脚本使用PHPMailer发送它:
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPAutoTLS = false;
$mail->Host = '11.222.33.444';
$mail->Port = 25;
$mail->Username = 'user@domain.com';
$mail->Password = '1234';
$mail->isHTML(true);
$mail->SetFrom('admin@client.com', 'admin');
$mail->Subject = $subject;
$mail->Body = $body;
$mail->CharSet = 'UTF-8';
$mail->AddAddress($service->supplier_email);
$mail->addCC('user@domain.com');
$strat_time = microtime(true);
$mail->Send();
echo microtime(true) - $strat_time . "<br>";
问题是它需要很长时间(大约5秒才执行$ mail-&gt; Send()函数,这意味着在生产中脚本需要运行大约25-35分钟才能发送所有预订)。
我不确定延长'max_execution_time'的时间长度,或者它是否能让脚本运行这么长时间。
我试图将IsSMTP()切换到IsMail(),脚本运行得更快,但似乎没有收到电子邮件。
我非常感谢有关执行上述任务的最有效方式的任何建议或指示
*******评论后添加*******
@Synchro我已经尝试过你提到的方法,但是我的执行时间(约20%)得到了微小的改进,当然不是每秒250条消息。这是我的测试代码:
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPKeepAlive = true;
$mail->SMTPAutoTLS = false;
$mail->Host = '******';
$mail->Port = 25;
$mail->Username = '*****';
$mail->Password = '****';
$mail->isHTML(true);
$mail->SetFrom('******', '*****');
$mail->CharSet = 'UTF-8';
foreach ($array as $value) {
$mail->Subject = $value->subject;
$mail->Body = $value->body;
$mail->AddAddress($value->mail);
$mail->Send();
$mail->clearAddresses();
}
你能认出我做错了什么吗?