如何对 Windows 上的 PHPMailer/OpenSSL TLS SMTP 进行故障排除?
How to troubleshoot PHPMailer/OpenSSL TLS SMTP on Windows?
我运行在 Windows 上 XAMPP 使用 OpenSSL PHPMailer。
我在与我们的邮件网关建立 TLS 加密的 SMTP 连接时遇到问题。
我开启了SMTP transcript debugging for 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 问题可能是什么。
a closed issue on the PHPMailer Github, but the issue resolution there involved troubleshooting the connection using the OpenSSL command line client, as described in the PHPMailer troubleshooting page. This page gives some instructions on how to test the underlying OpenSSL connection outside of the PHP context 中描述了类似的症状,其中应详细说明连接可能失败的原因。它对 运行 说以下命令:
echo QUIT | openssl s_client -starttls smtp -crlf -connect redactedemailserver.example.com:587
我想这在 Linux 上的 bash 中有效,但我在 Windows 上运行宁 XAMPP。我尝试了 运行宁一个希望等效的 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
- PHP邮件程序 6.0.6
- OpenSSL 1.0.2l
XAMPP 7.1.7 包含两份 openssl.exe
.
C:\xampp\php\extras\openssl
中的副本无效。从 PowerShell 启动时,没有任何反应。从命令提示符启动时,会出现一个错误消息框,上面写着 The ordinal 4070 could not be located in the dynamic link library
。这似乎可能是 result of a bad build.
然而,位于 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
我运行在 Windows 上 XAMPP 使用 OpenSSL PHPMailer。
我在与我们的邮件网关建立 TLS 加密的 SMTP 连接时遇到问题。
我开启了SMTP transcript debugging for 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 问题可能是什么。
a closed issue on the PHPMailer Github, but the issue resolution there involved troubleshooting the connection using the OpenSSL command line client, as described in the PHPMailer troubleshooting page. This page gives some instructions on how to test the underlying OpenSSL connection outside of the PHP context 中描述了类似的症状,其中应详细说明连接可能失败的原因。它对 运行 说以下命令:
echo QUIT | openssl s_client -starttls smtp -crlf -connect redactedemailserver.example.com:587
我想这在 Linux 上的 bash 中有效,但我在 Windows 上运行宁 XAMPP。我尝试了 运行宁一个希望等效的 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
- PHP邮件程序 6.0.6
- OpenSSL 1.0.2l
XAMPP 7.1.7 包含两份 openssl.exe
.
C:\xampp\php\extras\openssl
中的副本无效。从 PowerShell 启动时,没有任何反应。从命令提示符启动时,会出现一个错误消息框,上面写着 The ordinal 4070 could not be located in the dynamic link library
。这似乎可能是 result of a bad build.
然而,位于 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