PearMailer,PHP7和OpenSSL无法连接到未知错误的gmail

时间:2016-06-21 03:50:34

标签: php email pear php-openssl pear-mail

我正在建立一个网站,其中一部分需要发送电子邮件(一个用于帐户密码重置链接,另一个用于一般用户 - 管理员联系)。我一直在使用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;在这里?

2 个答案:

答案 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。试一试。