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