Php 为什么我不能在托管域中使用swiftmailer发送邮件,但从本地主机服务器发送邮件时没有错误

Php 为什么我不能在托管域中使用swiftmailer发送邮件,但从本地主机服务器发送邮件时没有错误,php,email,cpanel,swiftmailer,Php,Email,Cpanel,Swiftmailer,我使用此代码从本地主机服务器发送邮件,但当我尝试使用上载到主机服务器的相同代码(使用cpanel)发送完全相同的邮件时,出现以下错误: <b>Fatal error</b>: Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username &quot;mail@gmail.com&quot; usi

我使用此代码从本地主机服务器发送邮件,但当我尝试使用上载到主机服务器的相同代码(使用cpanel)发送完全相同的邮件时,出现以下错误:

<b>Fatal error</b>: Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username &quot;mail@gmail.com&quot; using 2 posible authenticators' in /home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/Esmtp/AuthHandeler.php:181
Stack trace:
#0/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/EsmtpTransport.php(333):
Swift_Transport_Esmtp_authHandeler-&gt;afterEhlo(Object(Swift_SmtpTransport))
#1/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/AbstractSmtpTransport.php(118):
Swift_Transport_EsmtpTransport-&gt;_doHeloCommand()
#2/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Mailer.php(79):Swift_transport_abstractSampTransport-&gt;start()
#3/home/USER/public_html/mailFolder/sendMyMail.php(109):swift_mailer-&gt;send(Object(swift_message))
#4{main}
 thrown in <b>/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/Esmtp/AuthHandler.php</b> on line <b>181</b>
致命错误:未捕获异常“Swift_TransportException”,消息“无法使用用户名在SMTP服务器上进行身份验证”mail@gmail.com“在/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/Esmtp/authHandler.php中使用2个可能的身份验证器:181
堆栈跟踪:
#0/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/esmtpttransport.php(333):
Swift\U传输\U Esmtp\U authHandeler-afterEhlo(对象(Swift\U SmtpTransport))
#1/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/AbstractSmtpTransport.php(118):
Swift_Transport_ESMTP Transport-_doHeloCommand()
#2/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Mailer.php(79):swift_transport_abstractsampttransport-start()
#3/home/USER/public_html/mailFolder/sendMyMail.php(109):swift_mailer-send(Object(swift_message))
#4{main}
在第181行的/home/USER/public_html/mailFolder/swiftmailer-5.x/lib/classes/swift/Transport/Esmtp/AuthHandler.php中抛出
代码如下:

$transport = Swift_SmtpTransport::newInstance()
            ->setHost('smtp.gmail.com')
            ->setPort('587')
            ->setEncryption('tls')
            ->setUsername('mail@gmail.com')
            ->setPassword('password')
        ;
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
    ->setSubject($title)
    ->setFrom(array('mail@gmail.com' => 'myMail'))
    ->setTo(array($res => 'TO: '))
    ->setBody($body,'text/html');
     $headers = $message->getHeaders();
     $headers->addTextHeader('Content-Type', 'text/html');

$result = $mailer->send($message);
echo $result."<br/>";
$transport=Swift\u SmtpTransport::newInstance()
->setHost('smtp.gmail.com')
->设置端口('587')
->setEncryption('tls')
->setUsername('mail@gmail.com')
->setPassword('password')
;
$mailer=Swift\u mailer::newInstance($transport);
$message=Swift\u message::newInstance()
->设置主题($title)
->setFrom(数组('mail@gmail.com“=>”我的邮件“)
->setTo(数组($res=>'TO:'))
->setBody($body,'text/html');
$headers=$message->getHeaders();
$headers->addTextHeader('Content-Type','text/html');
$result=$mailer->send($message);
回显$result。“
”;
我到这里是为了解除服务器对我的IP的阻止:

我还启用了“访问不太安全的应用程序”
尝试将端口更改为465,主机更改为ssl://smtp.gmail.com. 看看它是否有效

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
   ->setUsername('YOUR_GMAIL_USERNAME')
   ->setPassword('YOUR_GMAIL_PASSWORD');

简单地说,PHPMailer比Swiftmailer更适合使用

从Swiftmailer改为PHPMailer似乎是一个更好的选择。这是因为PHPMailer似乎对调试信息有更好的访问和支持

使用PHPMailer,您可以使用
$mail->SMTPDebug=PHPMailer\PHPMailer\SMTP::DEBUG\u服务器
使脚本在电子邮件中返回一组信息

你也可以把它放在一个试抓器里

    try { 

              /* emailing functions and scripting goes here */ 

        } catch (PHPMailer\PHPMailer\Exception $e) {

           // Now you know that it failed and exactly why it failed
            echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";

        }
这实际上告诉你问题出在哪里,而不是关闭整个页面,因为这不会告诉你什么

除此之外,您还可以使用此链接在github上进行故障排除。查看脚本中失败电子邮件的最常见原因

是的,所以总的来说,PHPMailer是一个更好的电子邮件库,因为它对调试有更好的支持。Swiftmailer确实尝试了一点,他们在github上有自己的调试页面,他们鼓励人们去那里发布他们的bug问题,但是,他们没有像PHPMailer那样的调试页面

在我的示例中,我的托管提供商是godaddy,他们在发送电子邮件时遇到了许多令人沮丧的问题,信息都在github的phpMail疑难解答页面上


是的,所以我认为这个问题的一个好答案是简单地切换到另一个电子邮件库。

您确定自己拥有吗mail@gmail.com账户或者它被用来隐藏你的真实电子邮件?@ZamronyP.Juhara它被用来隐藏我的邮件account@learningbyexample你解决了吗?@benedict_不,我没有,我必须改变mailer@learningbyexample你改成了哪个邮递员??