PHPMailer和匿名TLS连接

问题描述:

我使用phpmailer在端口25上建立TLS连接。 我无法使用用户名/密码,因此它是匿名连接。PHPMailer和匿名TLS连接

服务器响应如下:

250-SIZE 
             250-PIPELINING 
             250-DSN 
             250-ENHANCEDSTATUSCODES 
             250-XXXXXXXA 
             250-XXXXXXXXXXXXXB 
             250-AUTH NTLM 
             250-XXXXXXXXXXXXXXXXXC 
             250-8BITMIME 
             250-BINARYMIME 
             250-XXXXXXXD 
             250-XXXXXXE 
             250-XXXXF 
             250 XXXXXXG 

当STARTTLS命令由PHPMailer的发送,服务器响应:

CLIENT -> SERVER: STARTTLS 
SERVER -> CLIENT: 500 5.3.3 Unrecognized command 
SMTP ERROR: STARTTLS command failed: 500 5.3.3 Unrecognized command 

因此很明显,匿名TLS不被提供服务器。 奇怪的是,如果我通过telnet连接到服务器,它正在工作。

这是一个phpmailer的问题?或者只是服务器的一些奇怪的行为?

如果它不通知STARTTLS,那么它不太可能工作 - 你确定你用telnet连接到同一台服务器吗?这是可能的发送后得到的是PHPMailer的看到通过调用这个服务器功能的数组:

var_dump($mail->getSMTPInstance()->getServerExtList()); 

如果你想手动测试它,你应该使用OpenSSL的s_client命令,而不是远程登录:

openssl s_client -connect mail.example.com:25 -starttls smtp 

这会告诉你更多的技术细节,如果它有效。

PHPMailer无论如何都会使用机会性TLS - 如果它发现服务器宣传STARTTLS,即使您未设置SMTPSecure = true,它也会自动启用加密。

+0

感谢您的回答。我通过telnet连接的服务器应该与我通过phpmailer使用的服务器相同。尽管如此,当我按照您的建议使用openssl时,发现存在证书问题。证书是为与我连接的服务器不同的服务器颁发的(尽管它以不同的方式传输)。我正试图解决这个问题,并希望它在那之后有效。 – Swissdude