Я использую PHPMailer на PHP 5.6, повышенная безопасность вокруг сертифицированного в PHP 5.6, безусловно, забавная.
Я пытаюсь отправить тестовое сообщение в домен, размещенный на dreamhost, ошибка, возвращаемая PHPMailer, заключается в следующем: Не удалось подключиться к узлу SMTP.
Эта ошибка неверна, но я включил ведение журнала, и вот что происходит на самом деле.
Соединение: открытие в mx1.sub4.homie.mail.dreamhost.com:25, timeout = 30, options = array() Соединение: открыт S: 220 homiemail-mx32.g.dreamhost.com ESMTP
C: EHLO s81a.ikbb.com
S: 250-homiemail-mx32.g.dreamhost.com 250-PIPELINING 250-SIZE 40960000 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250 8BITMIME
C: STARTTLS
S: 220 2.0.0 Готовность запуска TLS
C: QUIT
S: Ошибка SMTP ERROR: команда QUIT: соединение: закрыто
Я не мог понять, почему PHPMailer просто сдаётся, выдавая команду QUIT, когда она должна начать отправлять сообщение. Я получил еще один ключ из другого журнала:
Предупреждение PHP: stream_socket_enable_crypto(): сертификат peer CN = *.mail.dreamhost.com' did not match expected CN=
mx1.sub4.homie.mail.dreamhost.com 'в/home/ikbb/domains/dev.ikbb.com/public_html/includes/phpmailer/5.2 0,10/class.smtp.php
Если я использую некоторые настраиваемые параметры, чтобы предотвратить проверку сертификата, который они используют, я могу заставить его продолжить. Вот что я имею:
$mail->SMTPOptions = array (
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true));
Если я помещаю SMTPOptions туда и пропускаю проверку сверстников, сообщение идет в порядке - без предупреждения в PHP вообще.
Как я могу уловить эту ошибку, поэтому я знаю, что есть проблема, но все равно отправить сообщение?