Как устранить неполадки PHPMailer / OpenSSL TLS SMTP в Windows?

Я запускаю PHPMailer с OpenSSL на XAMPP в Windows.

У меня проблемы с установкой зашифрованного TLS SMTP-соединения с нашим почтовым шлюзом.

Я включил отладку стенограммы SMTP для PHPMailer. Расшифровка не очень информативная ИМО:

[06-Feb-2019 13:48:08 timezone/redacted] SERVER -> CLIENT: 220 redactedmailserver.example.com ESMTP Postfix

[06-Feb-2019 13:48:08 timezone/redacted] CLIENT -> SERVER: EHLO redactedclientname

[06-Feb-2019 13:48:08 timezone/redacted] SERVER -> CLIENT: 250-redactedmailserver.example.com
250-SIZE 52428800
250-ETRN
250-STARTTLS
250-AUTH CRAM-MD5 PLAIN LOGIN DIGEST-MD5
250-AUTH=CRAM-MD5 PLAIN LOGIN DIGEST-MD5
250-ENHANCEDSTATUSCODES
250 8BITMIME

[06-Feb-2019 13:48:08 timezone/redacted] CLIENT -> SERVER: STARTTLS

[06-Feb-2019 13:48:08 timezone/redacted] SERVER -> CLIENT: 220 2.0.0 Ready to start TLS

[06-Feb-2019 13:48:08 timezone/redacted] SMTP Error: Could not connect to SMTP host.
[06-Feb-2019 13:48:08 timezone/redacted] CLIENT -> SERVER: QUIT

[06-Feb-2019 13:48:08 timezone/redacted] SERVER -> CLIENT: 
[06-Feb-2019 13:48:08 timezone/redacted] SMTP ERROR: QUIT command failed: 
[06-Feb-2019 13:48:08 timezone/redacted] SMTP Error: Could not connect to SMTP host.
[06-Feb-2019 13:48:08 timezone/redacted] SMTP Error: Could not connect to SMTP host.

Стенограмма, по крайней мере, доказывает, что сообщение об ошибке вводит в заблуждение; PHPMailer успешно подключается к SMTP-серверу, но что-то не так с STARTTLS. Однако сообщение об ошибке и стенограмма не дают намеков на то, в чем может быть конкретная проблема TLS.

Подобные симптомы описаны в закрытой проблеме на PHPMailer Github, но решение проблемы там включал устранение неполадок соединения с помощью клиента командной строки OpenSSL, как описано на странице устранения неполадок PHPMailer . На этой странице приведены некоторые инструкции по как проверить базовое соединение OpenSSL вне контекста PHP, в котором должна быть подробно описана причина сбоя соединения. Он говорит, что нужно запустить следующую команду:

echo QUIT | openssl s_client -starttls smtp -crlf -connect redactedemailserver.example.com:587

Я предполагаю, что это работает в bash в Linux, но я запускаю XAMPP в Windows. Я попытался запустить, надеюсь, эквивалентную команду PowerShell:

echo QUIT | C:\xampp\php\extras\openssl\openssl.exe s_client -starttls smtp -crlf -connect redactedemailserver.example.com:587

Но вроде ничего не происходит. Снова появляется новое приглашение PowerShell, и нет очевидного вывода из openssl.

Я также пробовал запустить команду без echo QUIT |. Тем не менее, ничего не произошло.

Какие команды PowerShell / openssl.exe можно использовать в Windows, чтобы определить причину сбоя STARTTLS?

Номера версий:

  • XAMPP 7.1.7
  • PHP 7.1.7
  • PHPMailer 6.0.6
  • OpenSSL 1.0.2l

person Hydrargyrum    schedule 06.02.2019    source источник
comment
Я провел несколько экспериментов методом грубой силы со свойством SMTPOptions PHPMailer (php.net/ manual / en / context.ssl.php). Если я установил verify_peer_name => false, STARTTLS работает. Я все еще хотел бы знать, как получить подробную диагностику сертификата OpenSSL в Windows, чтобы я мог точно выяснить, почему имя однорангового узла сертификата не проверяется успешно.   -  person Hydrargyrum    schedule 06.02.2019
comment
Очень хорошо написанный вопрос, спасибо! К сожалению, мне нечего добавить по поводу диагностики OpenSSL в Windows.   -  person Synchro    schedule 06.02.2019


Ответы (1)


XAMPP 7.1.7 включает две копии openssl.exe.

Копия в C:\xampp\php\extras\openssl не работает. При запуске из PowerShell ничего не происходит. При запуске из командной строки появляется окно сообщения об ошибке с надписью The ordinal 4070 could not be located in the dynamic link library. Возможно, это результат плохой сборки.

Однако копия, расположенная в C:\xampp\apache\bin, работает, как описано в руководстве по устранению неполадок PHPMailer.

Итак, ответ на мой исходный вопрос - просто запустить команду, указанную в руководстве по устранению неполадок, но с использованием неизмененной копии openssl.exe:

echo QUIT | C:\xampp\apache\bin\openssl.exe s_client -starttls smtp -crlf -connect redactedemailserver.example.com:587
person Hydrargyrum    schedule 06.02.2019