我正在建立一个网站,其中一部分需要发送电子邮件(一个用于帐户密码重置链接,另一个用于一般用户 - 管理员联系)。我一直在使用PearMailer通过GMail帐户发送电子邮件,而且这个工作正常......直到现在。出于某种原因,它已停止发送电子邮件,并且它给了我这个非常无益的错误:
[message] => Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) (code: -1, response: )
openSSL已启用,我使用的所有凭据都是正确的(我可以使用它们手动登录该GMail帐户)。
这是我使用的代码,其中$ config包含帐户凭据,$ _POST数据来自“联系我们”表单(在我开发时忽略了缺少清理):
require_once "Mail.php";
$params=array(
"host"=>"ssl://smtp.gmail.com",
"port"=>465,
"auth"=>true,
"username"=>$config["mailFrom"],
"password"=>$config["mailPass"]
);
$headers=array(
"To"=>$config["mailFrom"],
"From"=>$_POST['user']." <".$_POST["reply-to"].">",
"Content-type"=>"text/html",
"Subject"=>$_POST['subject']
);
$mail=Mail::factory("smtp", $params);
$sent=$mail->send($config["mailFrom"], $headers, htmlentities($_POST['body']));
它应该向我的GMail帐户发送一封电子邮件,但相反,它会给我上面提到的错误。更改地址后,无论如何,它仍然会给我错误。这是特别奇怪的,因为几乎相同的代码是我用来发送密码重置链接的东西,直到现在才能正常工作;当然,它现在也无法连接。
我无法找到任何说谷歌已经改变其设置的内容,而且我绝对没有超过smtp.gmail.com应该允许的每天2,000条消息限制,所以&#39;在这里?
答案 0 :(得分:1)
我的解决方案:从PearMailer切换到SwiftMailer,在那里,我使用verify_peer
将SSL选项verify_peer_name
和$transport->setStreamOptions
设置为false。这似乎发送邮件就好了。 (如果没有禁用这些选项,显然GMail的SSL证书与新版本的PHP不兼容。转到图。)
答案 1 :(得分:0)
编辑:
我不确定这是否对您有用,请尝试:
$params=array(
"host"=>"smtp.gmail.com",
"port"=>587,
"auth"=>true,
"username"=>$config["mailFrom"],
"password"=>$config["mailPass"]
);
这将使用TLS而不是SSL。试一试。