我刚刚将我的XAMPP开发工具从1.7.3更新到OS X的最新版本5.6.8。这将PHP从5.3.1更新到5.6.8。它打破了PHPMailer,通过SSL连接(而不是TLS(上的SMTP向我的托管站点邮件服务器发送访问者查询。问题是我的托管网站只使用自签名证书进行身份验证。这对旧的XAMPP没有影响。但对于最新的一个,PHPMailer用于SMTP的函数stream_socket_client
生成了这个错误:
SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
这就是我所做的
- 修改PHPMailer以接受SSL上下文选项PHP Mailer
send
函数还不接受SSL上下文选项,尽管内部SMTPconnect
函数有可选参数。此外,我还取消了函数stream_socket_client
的错误消息。我使用此选项:
$mail->SMTPOption = array( 'smtp' => array(
'verify_peer' => false,
'verivy_peer_name' => false, 'allow_self_signed' => true) );
但这并没有任何效果,OpenSSL仍然提出了上述消息。
在php.ini中添加openssl.cafile和openssl.capath属性。它仍然不起作用。
PHPMailer调试输出只有以下内容
Connection: opening to ssl://wates.idwebhost.com:465, t=300, opt=array ( 'smtp' => array ( 'verify_peer' => false, 'verivy_peer_name' => false, 'allow_self_signed' => true, ),) SMTP ERROR: Failed to connect to server: (0) SMTP connect() failed.
请指导我解决这个问题。
好吧,显然我使用了PHPMailer的旧版本。更新到5.2.10版本后,问题得到了解决。