4

我知道以前有人问过这个问题,并且我已经阅读了那里的所有帖子,但我仍然找不到解决方案。

我有一台安装了 wamp 的 Windows 机器。当我尝试通过谷歌的 SMTP 服务器发送一封简单的电子邮件时,一切正常。但是,当我将相同的脚本复制到 Ubuntu 12 机器时,它给了我这个错误:

PHP Fatal error:  Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username "xxx@gmail.com" using 2 possible authenticators' in /home/TestMail/SwiftMail/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:171
Stack trace:
/home/TestMail/SwiftMail/lib/classes/Swift/Transport/EsmtpTransport.php(289): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport))
/home/TestMail/SwiftMail/lib/classes/Swift/Transport/AbstractSmtpTransport.php(114): Swift_Transport_EsmtpTransport->_doHeloCommand()
/home/TestMail/SwiftMail/lib/classes/Swift/Mailer.php(76): Swift_Transport_AbstractSmtpTransport->start()
/home/TestMail/testmail.php(73): Swift_Mailer->send(Object(Swift_Message))
thrown in /home/TestMail/SwiftMail/lib/classes/Swift/Transport/Esmtp/AuthHandler.php on line 171

这就是我初始化传输的方式:

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')

我尝试smtp.gmail.com在端口 465 上 telnet,它工作正常,所以它一定不是防火墙问题。

我使用 PHP 启用了 SSL。我尝试使用不同的邮件服务器发送带有和不带有 SSL 的两封单独的邮件,一切都像魅力一样。只有谷歌的邮件让我生气。

任何想法都会在这里受到欢迎。

我的整个php代码:

<?php
require_once 'SwiftMail/lib/swift_required.php';
// Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername('xxx@gmail.com')
  ->setPassword('xxx');

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

$htmlbody = 'some html here';

// Create a message
$message = Swift_Message::newInstance('without head')
    ->setFrom(array('<from email>' => '<some sender>'))
    ->setTo(array('<to email>' => '<some recepient>'))
    ->setBody($htmlbody, 'text/html');

// Send the message
$result = $mailer->send($message);

var_dump($result);
?>

谢谢!

4

3 回答 3

25

这是一个旧线程,但是对于相同的错误,我的解决方案有点不同。原来我的 Swift 配置很好。我的服务器的 IP 被谷歌阻止为可疑。我可以通过访问此链接来清除它,然后从服务器执行我的邮件程序代码。

http://www.google.com/accounts/DisplayUnlockCaptcha

于 2013-07-03T21:26:25.577 回答
2

您还可以检查是否未启用两步验证身份验证。我就是这种情况。

于 2012-12-12T12:44:39.870 回答
1

欢迎来到 SO。这更像是一个冗长的评论而不是一个答案。很高兴看到您发布了错误消息:

PHP 致命错误:未捕获的异常 'Swift_TransportException' 和消息'无法在 /home/TestMail/SwiftMail/lib/classes/Swift/Transport/Esmtp/ 中使用 2 个可能的身份验证器在用户名“xxx@gmail.comm”的 SMTP 服务器上进行身份验证AuthHandler.php:171

其中一部分是实际消息:

无法使用 2 个可能的身份验证器在用户名“xxx@gmail.comm”的 SMTP 服务器上进行身份验证

我会说这是你犯的错字:

xxx@gmail.comm
             ^

可以发生。请验证您使用的是正确的登录凭据。此外,即使您在网站上发现类似的问题,也不一定意味着它们涵盖了您的问题。

希望这会有所帮助,否则请尝试提供更多错误信息,例如是否有 swiftmailer 的日志?您是否仔细检查了凭据和服务器配置?防火墙在做什么?等等等等。

于 2012-09-30T19:20:31.917 回答