我知道对此有一些问题,但我能找到的任何问题都没有解决我的问题。
我在 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 包装器......