PHPMailer有时会抛出“SMTP服务器错误:需要身份验证”

时间:2014-05-02 00:35:10

标签: php phpmailer

使用GoDaddy托管,我有一个PHP脚本来发送电子邮件。现在,它在大多数情况下都很有效,但有时,它会给我提供消息" SMTP服务器错误:需要身份验证"并且没有发送邮件。

为什么会发生这种情况,有没有办法解决它?

下面是代码:

<?php

if (!class_exists('PHPMailer'))
    include("class.phpmailer.php");

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "smtpout.secureserver.net";
$mail->Port = 80;
$mail->SMTPAuth = true;
$mail->Subject = "$subject - $dealer_name";
$mail->Password = "mypassword";

if ($id_dealership == 77) 
    $mail->Subject = "$subject - $dealer_name (Unassigned) - $website";
else            
    $mail->Subject = "$subject - $dealer_name";

if ($id_dealership == 30 || $id_dealership == 146) 
{
    $from_email = 'myemail1@domain.com';
    $from_email2 = 'myemail2@domain.com';
}
else if ($id_dealership == 207) 
{
    $from_email = 'myemail3@domain.com';
    $from_email2 = 'myemail4@domain.com';
}
else
{
    $from_email = 'myemail5@domain.com';
    $from_email2 = 'myemail6@domain.com';
}

$mail->Username = $from_email;
$mail->setFrom($from_email, 'Our Company'); 
$mail->AddAddress($from_email);

if ($id_dealership == 159)  
    $mail->Body = $msg_xml2;        
else if ($id_dealership == 83)
    $mail->Body = $msg_xml;
else
    $mail->Body = $msg;

foreach ($dealer_email as $k => $v)
{
    $v = trim($v);
    $mail->AddAddress($v);
}

if (!$mail->send())
{
    $mail->Username = $from_email2;
    $mail->setFrom($from_email2, 'Our Company');    
    $mail->ClearAllRecipients();

    foreach ($dealer_email as $k => $v)
    {
        $v = trim($v);
        $mail->AddAddress($v);
    }

    $mail->AddAddress($from_email2);

    if (!$mail->send())
    {
        mail('myemail@gmail.com', 'Mail not sent to dealer '.$id_dealership, "lead id ".$id_lead."\n\nError: ".$mail->ErrorInfo, 'From: ourcompany@domain.com');
    }
}

?>

注意:所有$ from_email使用的密码都相同。

2 个答案:

答案 0 :(得分:0)

像@Abhi一样,Beckert说,你应该和GoDaddy一起检查。 但是,如果你正在使用&#34; mail()&#34;,你可以尝试检查错误,然后重试发送电子邮件,看看当你收到随机错误时它是否有效。

if (!mail(...)) {
   // retry or reschedule for later (or maybe sleep for a couple of seconds)
}

我会给它一个镜头,当你得到一个2-3秒睡眠()之间的错误时,可能尝试4-5次。如果这样做有效,这是一个难看的修复,你可能应该得到更可靠的东西,或者让GoDaddy来解决它。

答案 1 :(得分:0)

没有你的代码,我无法给你答案,但我可以猜到。

我猜您正在使用mail发送邮件。错误告诉你的是你必须使用smtp并且它必须被授权。这就像服务器发送电子邮件的登录一样。

对于SMTP,您应使用swiftmailerphpmailer

等库