Вопрос:
При попытке настроить и отправить почту с помощью 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
Я рассмотрел другие решения, и никто из них не работает. Вот некоторые подробности:
-
Мой сертификат (из letencrypt) действителен, по крайней мере, в моей конфигурации 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»;
Как я уже сказал, я пробовал различные решения в другом месте на сайте, и никто из них не работает. И я сбив с толку, потому что мой локальный сертификат (и сертификат почтового сервера в этом отношении) являются действительными.
Я действительно не хочу отключать проверку сверстников, как это было предложено в другом месте, но если я должен догадаться, я это сделаю.
Лучший ответ:
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’;
заработает! Я чувствую себя болваном, но я надеюсь, что это поможет кому-то другому.