Как устранить неполадки PHPMailer / OpenSSL TLS SMTP в Windows? - PullRequest
0 голосов
/ 06 февраля 2019

Я использую PHPMailer с OpenSSL на XAMPP в Windows.

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

Я включил * 1005Отладка стенограммы SMTP для PHPMailer .Стенограмма не является сверхинформативной IMO:

[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 |.Тем не менее, ничего не произошло.

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

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

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

1 Ответ

0 голосов
/ 06 февраля 2019

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
...