使用PHP邮件程序发送2封电子邮件失败

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)

然后,通过逐步降低睡眠时间,您应该能够确定哪个是速率限制.


Vik*_*ram 5

试试这个:正如 @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)


fbi*_*ich 1

钥匙可能就在于你忽略的部分。两封电子邮件的发件人域是否相同?否则 SMTP 主机可能会将其视为中继尝试。如果您有权访问 SMTP 服务器日志,请检查这些日志;他们可能会提供线索。

另外,检查一下$mail->ErrorInfo内容...它可能会告诉您问题是什么。