如何在Windows上对PHPMailer / OpenSSL TLS SMTP进行故障排除?

时间:2019-02-06 06:33:18

标签: windows openssl xampp phpmailer starttls

我正在Windows的XAMPP上运行带有OpenSSL的PHP​​Mailer。

我无法建立与我们的邮件网关的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失败的原因?

版本号:

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

1 个答案:

答案 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