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

时间:2016-02-22 02:31:22

标签: php email cpanel swiftmailer

我已经使用此代码从我的localhost服务器发送邮件但是当我尝试使用上传到我的托管服务器的相同代码(使用cpanel)发送完全相同的邮件时,我收到以下错误:

td

这是代码:

<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>

我已经离开这里从服务器取消阻止我的IP: http://www.google.com/accounts/DisplayUnlockCaptcha

并且我已启用&#34;访问不太安全的应用程序&#34; https://www.google.com/settings/security/lesssecureapps

3 个答案:

答案 0 :(得分:0)

尝试将您的端口更改为465并托管到ssl://smtp.gmail.com。看看它是否有效。

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

答案 1 :(得分:0)

简单地说,PHPMailer比Swiftmailer更好用。

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

使用PHPMailer,您可以使用$mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_SERVER;来使脚本在电子邮件中返回大量信息。

您还可以将其放入尝试捕获中

    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}";

        }

实际上告诉您问题出在哪里,而不是整个页面都关闭了,因为这什么都没告诉您。

最重要的是,您可以使用此链接https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting在github上进行故障排除。在脚本中查看导致电子邮件失败的最常见原因。

是的,总体而言,PHPMailer是一个更好用的电子邮件库,因为它具有更好的调试支持。 Swiftmailer确实做了一些尝试,他们在github https://github.com/swiftmailer/swiftmailer/issues上拥有自己的调试页面,并且鼓励人们去那里发布他们的错误问题,但是,他们没有像PHPMailer这样的调试页面。 >

在我的示例中,我的托管服务提供商是Godaddy,在发送电子邮件时他们遇到了许多令人沮丧的问题,并且GitHub PHPMailer故障排除页面上的信息都在那里。

是的,所以我认为对这个问题的一个很好的答案是简单地更改为其他电子邮件库。

答案 2 :(得分:0)

嗨,当您在 Google 帐户安全性中生成 APP PASSWORD 并启用第二次身份验证时,可以获得此解决方案。

按照本指南提供 setPassword('YOUR_GMAIL_PASSWORD'); 至 16 个字符的 Google 应用密码。

如何生成应用密码的详细说明可以通过这个链接: https://support.google.com/accounts/answer/185833?hl=en