gpt4 book ai didi

php - Zend Framework 无法打开 ssl 套接字 (Abstract.php)

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:25 26 4
gpt4 key购买 nike

我正在将 Magento 1.9.1 配置为使用外部 SMTP 发送电子邮件,使用 SMTP PRO (https://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html)。

我已经设置了配置(主机名、端口、用户名、密码),但是当我尝试发送测试电子邮件时失败并显示“无法打开套接字”错误消息。如果我深入研究代码,我会发现错误是由 lib/Zend/Mail/Protocol/Abstract.php 中的这段代码生成的:

$this->_socket = @stream_socket_client($remote, $errorNum, $errorStr, self::TIMEOUT_CONNECTION);

if ($this->_socket === false) {
if ($errorNum == 0) {
$errorStr = $remote.' Could not open socket '.phpversion();
}
/**
* @see Zend_Mail_Protocol_Exception
*/
#require_once 'Zend/Mail/Protocol/Exception.php';
throw new Zend_Mail_Protocol_Exception($errorStr);
}

我的 PHP 环境 (5.6.30) 支持 openssl(见下图和代码片段) SSL Support

[root@ns3023903 httpdocs]# php -r 'print_r(stream_get_transports());'
Array
(
[0] => tcp
[1] => udp
[2] => unix
[3] => udg
[4] => ssl
[5] => sslv3
[6] => sslv2
[7] => tls
)

没有防火墙问题,因为我既可以在端口 465 上远程登录到目标主机,也可以使用 phpmailer 和我用来运行网站虚拟主机的相同用户使用相同的 SMTP 发送电子邮件。

我在 CentOS 7 64 位服务器上,禁用了 SELinux,如果这很重要,我正在使用 Plesk 12 配置虚拟主机。

名称解析也工作正常(我可以正确 ping SMTP 名称,并且可以很好地查找 IP 地址)。

我显然在这里遗漏了一些东西......但是什么?

最佳答案

事实证明,根据 stream_socket_client() 假定的默认选项,它在 PHP 5.6.30 版中发生了变化。

首先,在摆脱 Magento 核心代码中 stream_socket_client 调用前面的愚蠢 @ 之前,我实际上无法理解发生了什么。我什至不太了解 PHP 开发人员,所以我一直忘记那个愚蠢的 @ 前缀是干什么用的(老实说,我什至不知道它为什么存在)。

删除@后我看到了这个:

Warning: stream_socket_client(): Peer certificate CN=`*.aruba.it' did not match expected CN=`mail.myclientreserveddomain.com'

我仔细查看了 PHP 文档,发现了与核心代码的两行差异(我知道这是不对的,我现在将重构它,但我想先分享快速解决方法)。

基本上我正在创建上下文并使用另一个版本的 stream_socket_client 调用

 $context = stream_context_create(['ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]]);
// open connection
$this->_socket = stream_socket_client($remote, $errorNum, $errorStr, 120, STREAM_CLIENT_CONNECT, $context);

跳过对等名称验证是关键。不确定为什么/如何/何时从 php pre 5.6.30 更改为 PHP 5.6.30(我说过我不是 PHP 开发人员吗?)但它有效。我还尝试在 PHP 5.4.x 下运行原始代码,它在没有解决方法的情况下工作,所以它确实是这样。

关于php - Zend Framework 无法打开 ssl 套接字 (Abstract.php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44547978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com