Smtp PHP编译器和匿名TLS连接
我正在使用phpmailer在端口25上建立TLS连接。 我不能使用用户名/密码,因此它是匿名连接 服务器响应如下:Smtp PHP编译器和匿名TLS连接,smtp,phpmailer,tls1.2,Smtp,Phpmailer,Tls1.2,我正在使用phpmailer在端口25上建立TLS连接。 我不能使用用户名/密码,因此它是匿名连接 服务器响应如下: 250-SIZE 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES
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问题吗?或者只是服务器的一些奇怪行为?如果它不公布STARTTLS,那么它就不太可能工作-您确定您正在使用telnet连接到同一台服务器吗?通过在发送以下内容后调用,可以获得PHPMailer看到的一系列服务器功能:
var_dump($mail->getSMTPInstance()->getServerExtList());
如果要手动测试,应使用openssls_client
命令,而不是telnet:
openssl s_client -connect mail.example.com:25 -starttls smtp
这将向您展示更多的技术细节,如果可行的话
无论如何,PHPMailer都会进行投机取巧的TLS—如果它看到服务器播发STARTTLS,它会自动启用加密,即使您没有设置
SMTPSecure=true
希望下面的黑客攻击能够帮助您:)
这是我的PHPMailer对象
$phpmailer
评论行
$phpmailer->SMTPSecure = 'tls';
加
$phpmailer->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
谢谢你的回答。我通过telnet连接到的服务器应该与我通过phpmailer使用的服务器相同。然而,当我按照您的建议使用openssl时,我发现有一个证书问题。该证书是为与我连接的服务器不同的服务器颁发的(尽管其通信方式不同)。我现在正试图解决这个问题,希望在那之后能奏效。