我正在尝试在使用apache的本地服务器上的端口465上使用ssl在smtp服务器上使用php函数fsockopen。 它适用于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 with command line
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) ''
答案 0 :(得分:0)
我将我的Apache版本从2.2升级到2.4,现在可以使用了。
我已经按照这个tutoriel:http://lifeofageekadmin.com/how-install-apache-2-4-php-5-4-and-mysql-5-5-21-on-windows-7/来获取新的Apache版本。
答案 1 :(得分:0)
我遇到类似问题的联系表单使用验证码,收到错误
fsockopen(): unable to connect to ssl://mail.google.com:443
这是在FreeBSD vm上,安装了Joomla。
正在搜索,我发现http://php.net/manual/en/function.fsockopen.php提到了证书验证。
安装了FreeBSD端口ca_root_nss
,其中包括Mozilla NSS库中包含的证书颁发机构的Root证书的证书验证。