尝试使用PHPMailer配置和发送邮件时收到以下警告:
PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
我已经查看了其他解决方案,但没有一个能够正常工作。以下是一些细节:
我的证书(来自letsencrypt)是有效的,至少在我的Nginx配置中是这样。我的WordPress网站安全无误地运行。我的PHP版本是7.0.xx
我已尝试将证书文件位置添加到php.ini
,但它会警告无法加载流,即使地址是正确的。这是我尝试过的(其中包括):
openssl.capath = "/etc/letsencrypt/live/example.org/"
这导致了
与上面完全相同的错误。
我也尝试过:
openssl.cafile = "/etc/letsencrypt/live/example.org/fullchain.pem"
,但会收到警告:PHP Warning:failed loading cafile stream
我的PHP邮件程序配置(位于我的wordpress函数文件中)如下所示:
$phpmailer->Host = 'mail.example.org';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'myadminaccount@example.org';
$phpmailer->Password = 'mypassword';
$phpmailer->SMTPSecure = "tls";
$phpmailer->From = "myadminaccount@example.org";
$phpmailer->FromName = "MY Admin Account";
正如我所说,我在网站的其他地方尝试了各种解决方案,但没有一个能够正常运行。我感到困惑,因为我的本地证书(以及邮件服务器的证书)都是有效的。
我真的不想像其他地方建议的那样关闭同行验证,但如果我必须,我想我会。
答案 0 :(得分:1)
UGH解决方案相当简单,除了我上面写的内容之外。我正在使用一个开关盒来检查以确保我的服务器是正确的,如下所示:
switch ($_SERVER['HTTP_HOST']) {
case 'https://example1.org':
// Set the hostname of the mail server
$phpmailer->Host = 'mail.example1.org';
我需要省略https
。所以改成它:
switch ($_SERVER['HTTP_HOST']) {
case 'example1.org':
// Set the hostname of the mail server
$phpmailer->Host = 'mail.example1.org';
让它工作!我觉得自己像个傻瓜,但我希望这有助于其他人。