我正在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中进行了描述,但那里的问题解决方案涉及使用OpenSSL命令行客户端对连接进行故障排除,如PHPMailer troubleshooting page中所述。此页面在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失败的原因?
版本号:
答案 0 :(得分:0)
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