PHP SwiftMailer无法在SMTP服务器上进行身份验证

时间:2013-10-02 10:16:02

标签: php email sendmail swiftmailer

我正在尝试创建一个处理paypal付款的测试网站。我试图在成功付款后使用PHP SwiftMailer向用户发送电子邮件(这是我的IPN)。

以下是我的传输代码:

        $transport = Swift_SmtpTransport::newInstance('smtp.googlemail.com', 465, 'ssl')
          ->setUsername('xxx@xxx.co.uk')
          ->setPassword('xxxx');    

    $mailer = Swift_Mailer::newInstance($transport);

我曾尝试使用googlemail和另一封托管在共享服务器下的电子邮件,但两者都有问题发出错误。

不幸的是,我收到了这个常见的错误:

  Fatal error: Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username "xxx@xxx.co.uk" using 2 possible authenticators' in /home/xxx/public_html/paypal/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:184 

  Stack trace: 

  #0 /home/xxx/public_html/paypal/lib/classes/Swift/Transport/EsmtpTransport.php(312): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport)) 

  #1 /home/xxx/public_html/paypal/lib/classes/Swift/Transport/AbstractSmtpTransport.php(120): Swift_Transport_EsmtpTransport->_doHeloCommand() 

  #2 /home/xxx/public_html/paypal/lib/classes/Swift/Mailer.php(80): Swift_Transport_AbstractSmtpTransport->start() 

  #3 /home/xxx/public_html/paypal/ipn.php(113): Swift_Mailer->send(Object(Swift_Message)) 

  #4 /home/mctikudo/public_html/paypal/ipn.php(46): sendMail(Resource id #3, Array) 

  #5 {main} thrown in /home/xxx/public_html/paypal/lib/classes/Swift/Transport/Esmtp/AuthHandler.php on line 184

我做了一些研究,并尝试了几种方法来设置我的运输。但似乎仍然没有任何效果。直到我试图将我的IPN代码放到另一家托管公司下的另一台服务器上,令人惊讶的是,它的确有效。来自另一个的代码相同。

这就是为什么我猜其他服务器中的某些东西必须设置或者什么。

我是否需要确保在我的服务器上启用SwiftMailer工作?

4 个答案:

答案 0 :(得分:18)

这可能已经过时但有人可能会通过这个获得帮助。我也面临同样的问题,并在我的Gmail帐户上收到一封邮件,说明有人试图通过电子邮件客户端或其他网站破解您的帐户。 我搜索过,发现下面会解决这个问题。

转到https://accounts.google.com/UnlockCaptcha 并解锁您的帐户,以便通过其他媒体/网站进行访问。

更新:2015

此外,您可以尝试此操作,转到https://myaccount.google.com/security#connectedapps 在底部,右侧有一个选项“允许不太安全的应用程序”。如果是“OFF”,请通过滑动按钮将其打开。

答案 1 :(得分:5)

如前所述,这可能已经过时,但您可以尝试允许gmail通过不太安全的应用发送邮件。

https://www.google.com/settings/security/lesssecureapps

这使它对我有用,我遇到了同样的问题。

答案 2 :(得分:3)

我知道这已经过时了,但希望这可以指向正确方向的人。使用Mandrill和Swiftmailer组合时我遇到了同样的问题。

我的问题是服务器正在从端口587停止SMTP邮件,这与我服务器上的FKA SMTP Tweak设置有关。

因此,如果您有Cpanel并且可以访问WHM,请尝试在调整下查看您的邮件设置,以查看是否限制外发SMTP邮件。其他选择是,您的服务器可能认为端口是可疑的。尝试更改端口,我发现我的托管公司有一个合适的端口列表。

答案 3 :(得分:0)

我知道我为时已晚,但是我对这个错误感到沮丧,由于所有这些答案,我已将其修复,希望对您有所帮助。

这与AWS Elastic BeansTalk上托管的网站一起使用。 将此添加到您的email.php或其他任何内容中

require_once 'files-needed/vendor/autoload.php';
//to send emails to our users
//google does not recognize this so we must change google settings
//(Allow less secure apps) Turned on
// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls'))
    ->setUsername(EMAIL)
    ->setPassword(PASSWORD);

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);

多亏了罗尼奥,我做到了

转到https://accounts.google.com/UnlockCaptcha‎并解锁您的帐户,以通过其他媒体/站点进行访问。

第1步:(重要!!)只要确保在访问此链接时

https://accounts.google.com/UnlockCaptcha‎

您从php代码中的同一封电子邮件登录,因为我以为是,但是当我输入https://accounts.google.com/时却发现这是另一封电子邮件。

步骤2: 我按照页面上的说明进行操作,然后立即访问我的网站并发送了电子邮件,最后..它成功了!!