2

我正在尝试在 smtp 服务器上使用 php 函数 fsockopen 在我的本地服务器上的端口 465 上使用 ssl 和 apache。它适用于 php 命令行,但是当脚本在我的浏览器中运行时出现 SSL 错误。

php.ini

extension=php_openssl.dll line is not commented

phpinfo 通过 Apache

Loaded Configuration File : D:\localhost\php-5.4.11\php.ini
openssl
OpenSSL support enabled
OpenSSL Library Version OpenSSL 0.9.8x 10 May 2012
OpenSSL Header Version  OpenSSL 0.9.8x 10 May 2012

带有命令行的phpinfo

Loaded Configuration File => D:\localhost\php-5.4.11\php.ini
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 0.9.8x 10 May 2012
OpenSSL Header Version => OpenSSL 0.9.8x 10 May 2012

我的剧本

$smtp = fsockopen('ssl://in.mailjet.com', 465, $errno, $errstr, 30);
$response = fgets($smtp, 4096);
if(empty($smtp)){
   echo $response;
   return false;
}
echo $response . '<br/>';
fclose($smtp);

apache下的输出

Warning: fsockopen(): SSL: crypto enabling timeout in XXX on line 2
Warning: fsockopen(): Failed to enable crypto in XXX on line 2
Warning: fsockopen(): unable to connect to ssl://in.mailjet.com:465 (Unknown error) in XXX on line 2

使用命令行输出

220 srv12.mailjet.com ESMTP Mailjet
<br/>

平台:我在 Windows 8 64 上使用 PHP 5.4.11 / Apache 2.2.22 (Win32)

-- 编辑 -- 我已经尝试按照建议使用 TLS:

$smtp = fsockopen('tls://in.mailjet.com', 567, $errno, $errstr, 30);

我得到

E_WARNING: fsockopen(): in XXX on line XXX

错误消息为空白,$errno = (int) 0并且$errstr = (string) ''

4

2 回答 2

0

我将我的 Apache 版本从 2.2 更新到 2.4,它现在可以工作了。

我已经按照这个教程:http: //lifeofageekadmin.com/how-install-apache-2-4-php-5-4-and-mysql-5-5-21-on-windows-7/得到新的 Apache 版本。

于 2013-04-17T07:37:20.247 回答
0

我在使用验证码的联系表单中遇到了类似的问题,出现错误

fsockopen(): unable to connect to ssl://mail.google.com:443

这是在安装了 Joomla 的 FreeBSD 虚拟机上。

搜索,我发现http://php.net/manual/en/function.fsockopen.php提到了证书验证。

安装了 FreeBSD 端口ca_root_nss,其中包括来自 Mozilla NSS 库中证书颁发机构的根证书的证书验证。

于 2016-02-16T01:01:18.930 回答