我们使用PHPMailer.服务器配置为使用本地SMTP.
因此,一般的PHPMailer突击队看起来像这样:
$mail = new PHPMailer();
$mail->From = 'info@localdomain.com';
$mail->Host = 'localhost';
$mail->IsSMTP();
...
从PHP5.6开始,这不再起作用,因为证书不匹配.我们收到以下错误:
Warning: stream_socket_enable_crypto(): Peer certificate
CN=’*.thisvps.com’ did not match expected CN=’localhost’ in /ho…PHPMailer_latest/class.smtp.php
我可以使用以下方法抑制此错误:
$this->smtpConnect([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
但是,这是正确的方法吗?我不喜欢抑制错误;).
还是我们的配置有错误?
版本信息:
PHP 5.6.30,
PHPMailer:5.2.21
欢迎任何建议,谢谢!
解决方法:
奇怪的是,如果您没有配置该证书,则会从服务器获取该证书.这可能取决于您的ISP重定向您的流量,尽管我不希望这会影响localhost.
您可以使用$mail-> SMTPSecure = false;完全关闭加密(对本地主机来说是安全的,因为没有外部网络流量),尽管您可能还需要设置$mail-> SMTPAutoTLS = false;以防止您的服务器发布STARTTLS时自动重新启用它.
或者,此主机可能在thisvps.com域中具有一个主机名,您可以使用该主机名,然后该名称将与证书匹配.