我知道之前已经问过这个问题而且我已经阅读了所有帖子,但我仍然无法找到解决方法。
我有一台安装了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')
我尝试通过端口465 telnet到smtp.gmail.com
并且工作正常,所以它一定不是防火墙问题。
我已启用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);
?>
谢谢!
答案 0 :(得分:24)
这是一个旧线程,但我的解决方案对于同样的错误有点不同。结果我的Swift配置很好。来自我服务器的IP被Google阻止为可疑。我可以通过访问此链接清除它,然后从服务器执行我的邮件代码。
答案 1 :(得分:2)
您还可以检查是否未启用2步验证身份验证。我就是这种情况。
答案 2 :(得分:1)
欢迎来到SO。这是一个冗长的评论而非答案。很高兴看到您发布了错误消息:
PHP致命错误:未捕获异常'Swift_TransportException',消息'无法在SMTP服务器上使用用户名“xxx@gmail.comm”在/ home / TestMail / SwiftMail / lib / classes / Swift / Transport中使用2个可能的身份验证器进行身份验证/Esmtp/AuthHandler.php:171
部分内容是实际信息:
无法使用2个可能的身份验证器在用户名为“xxx@gmail.comm”的SMTP服务器上进行身份验证
我说这是你做的错字:
xxx@gmail.comm
^
可能发生。请确认您使用的是正确的登录凭据。即使您在网站上发现类似的问题,也不一定意味着它们可以解决您的问题。
希望这会有所帮助,否则会尝试提供更多错误信息,例如有swiftmailer的日志吗?您是否仔细检查了凭据和服务器配置?防火墙在做什么?依此类推。