1

我知道对此有一些问题,但我能找到的任何问题都没有解决我的问题。

我在 LAMP 上使用 swift mailer 4.2.1。

我启用了 openSSL: 在此处输入图像描述

所以我尝试使用以下代码进行 SSL 连接:

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
          ->setUsername('email@somedomainwithgoogleapps.com')
          ->setPassword("pwd");
        $mailer = Swift_Mailer::newInstance($transporter);
        $message = Swift_Message::newInstance($subject)
          ->setFrom(array($from => 'From name'))
          ->setTo(array($to=> $name))
          ->setBody($html_content);

        $result = $mailer->send($message);

这会引发以下错误

在 /Swift/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:171 中,未捕获的异常“Swift_TransportException”与消息“无法使用 2 个可能的身份验证器在用户名“email@somedomainwithgoogleapps.com”的 SMTP 服务器上进行身份验证

如果我将代码更改为使用 tls,例如:

$transporter = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls')...(rest is the same)

我犯了同样的错误。如果我尝试将端口 465 与 tls 一起使用,则会出现连接超时。

如果我运行:

$sock = fsockopen('tls://smtp.gmail.com', 465, $errno, $errstr, 10); 
echo 'Socket is: '; 
var_dump($sock); 

echo 'Errors: ' . $errno . ' ' . $errstr; 

我明白了

Socket is: resource(2) of type (stream) Errors: 0

附加信息:

var_dump(stream_get_transports());

返回:

数组(8){[0]=>字符串(3)“tcp” 1 =>字符串(3)“udp”[2]=>字符串(4)“unix”[3]=>字符串(3)“udg " [4]=> 字符串(3) "ssl" [5]=> 字符串(5) "sslv3" [6]=> 字符串(5) "sslv2" [7]=> 字符串(3) "tls" }

所以我有 ssl 和 tls 包装器......

4

2 回答 2

2

我认为你可以使用这个:

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

--> smtp 使用 googlemail 而不是 gmail..

于 2012-09-17T12:17:42.740 回答
0

您使用的密码应该是从您的“应用程序专用密码”生成的密码,而不是您的原始密码。

于 2013-06-16T03:51:30.503 回答