Syl*_*rag 5 php email phpmailer
我对这个感到很困惑.
//SMTP servers details
$mail->IsSMTP();
$mail->Host = "mail.hostserver.com";
$mail->SMTPAuth = false;
$mail->Username = $myEmail; // SMTP usr
$mail->Password = "****"; // SMTP pass
$mail->SMTPKeepAlive = true;
$mail->From = $patrickEmail;
$mail->FromName = "***";
$mail->AddAddress($email, $firstName . " " . $lastName);
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = $client_subject;
$mail->Body = $client_msg;
if($mail->Send())
{
$mail->ClearAllRecipients();
$mail->ClearReplyTos();
$mail->ClearCustomHeaders();
...
$mail->From = "DO_NOT_REPLY@...";
$mail->FromName = "****";
$mail->AddAddress($ToEmail1, "***"); //To: (recipients).
$mail->AddAddress($ToEmail2, "***"); //To: (recipients).
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = $notification_subject;
$mail->Body = $notification_msg;
if($mail->Send())
{
...
Run Code Online (Sandbox Code Playgroud)
第一封电子邮件发送正常.第二个没有.这种行为可能是什么原因?我错过了某种重置吗?
更新:使用不同的邮件服务器似乎工作,所以显然它是特定邮件服务器的设置导致问题.知道那可能是什么吗?
小智 8
某些提供商对可在特定时间跨度内发送的消息数量施加限制.要确定您的问题是否取决于提供商的"速率限制",您应该尝试在第一次发送后添加暂停.例如:
if ($mail->Send()) {
sleep(10); // Seconds
...
if ($mail->Send()) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后,通过逐步降低睡眠时间,您应该能够确定哪个是速率限制.
试试这个:正如 @Felipe Alameda A 提到的Remove $mail->SMTPKeepAlive = true;
// for every mail
if(!$mail->Send())
{
echo 'There was a problem sending this mail!';
}
else
{
echo 'Mail sent!';
}
$mail->SmtpClose();
Run Code Online (Sandbox Code Playgroud)
钥匙可能就在于你忽略的部分。两封电子邮件的发件人域是否相同?否则 SMTP 主机可能会将其视为中继尝试。如果您有权访问 SMTP 服务器日志,请检查这些日志;他们可能会提供线索。
另外,检查一下$mail->ErrorInfo内容...它可能会告诉您问题是什么。