我使用phpmailer在端口25上建立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
当phpmailer发送STARTTLS命令时,服务器响应:
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问题吗?或者只是服务器的一些奇怪的行为???
答案 0 :(得分:2)
如果它没有宣传STARTTLS那么它不太可行 - 你确定你用telnet连接到同一台服务器吗?通过在发送后调用它,可以获得PHPMailer看到的服务器功能数组:
var_dump($mail->getSMTPInstance()->getServerExtList());
如果要手动测试,应使用openssl s_client
命令而不是telnet:
openssl s_client -connect mail.example.com:25 -starttls smtp
如果有效的话,那将向您展示更多技术细节。
PHPMailer无论如何都会做机会主义TLS - 如果它发现服务器通告STARTTLS,它会自动启用加密,即使你没有设置SMTPSecure = true
。
答案 1 :(得分:0)
希望以下骇客有助您:)
这是我的PHPMailer对象
$phpmailer
注释行
$phpmailer->SMTPSecure = 'tls';
然后添加
$phpmailer->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);