0

我正在建立一个网站,其中一部分需要发送电子邮件(一个用于帐户密码重置链接,另一个用于一般用户管理员联系)。我一直在使用 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 帐户发送一封来自它自己的电子邮件,但它却给了我上面提到的错误。更改往返地址后,无论如何,它仍然给我那个错误。这特别奇怪,因为我一直在使用几乎相同的代码来发送密码重置链接,并且直到现在都可以正常工作;当然,它现在也无法连接。

我找不到任何说 Google 已更改其设置的信息,而且我绝对没有超过 smtp.gmail.com 应该允许的每天 2,000 条消息的限制,所以这里发生了什么?

4

2 回答 2

1

我的解决方案:从 PearMailer 切换到 SwiftMailer,并且我正在设置 SSL 选项verify_peerverify_peer_name使用$transport->setStreamOptions. 这似乎现在发送邮件就好了。(如果没有禁用这些选项,显然 GMail 的 SSL 证书与较新版本的 PHP 不兼容。去看看。)

于 2016-06-21T04:49:48.067 回答
0

编辑:

我不确定这是否适合您,请尝试:

$params=array(
            "host"=>"smtp.gmail.com",
            "port"=>587,
            "auth"=>true,
            "username"=>$config["mailFrom"],
            "password"=>$config["mailPass"]
        );

这将使用 TLS 而不是 SSL。试试看。

于 2016-06-21T03:54:20.987 回答