Я запускаю 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
verify_peer_name => false
, STARTTLS работает. Я все еще хотел бы знать, как получить подробную диагностику сертификата OpenSSL в Windows, чтобы я мог точно выяснить, почему имя однорангового узла сертификата не проверяется успешно. - person Hydrargyrum   schedule 06.02.2019