Smtp PHP编译器和匿名TLS连接

Smtp PHP编译器和匿名TLS连接,smtp,phpmailer,tls1.2,Smtp,Phpmailer,Tls1.2,我正在使用phpmailer在端口25上建立TLS连接。 我不能使用用户名/密码,因此它是匿名连接 服务器响应如下: 250-SIZE 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES

我正在使用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问题吗?或者只是服务器的一些奇怪行为?

如果它不公布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

希望下面的黑客攻击能够帮助您:)

这是我的PHPMailer对象

$phpmailer
评论行

$phpmailer->SMTPSecure = 'tls';

$phpmailer->SMTPOptions = array(
    'ssl' => array(
        'verify_peer'       => false,
        'verify_peer_name'  => false,
        'allow_self_signed' => true
    )
);

谢谢你的回答。我通过telnet连接到的服务器应该与我通过phpmailer使用的服务器相同。然而,当我按照您的建议使用openssl时,我发现有一个证书问题。该证书是为与我连接的服务器不同的服务器颁发的(尽管其通信方式不同)。我现在正试图解决这个问题,希望在那之后能奏效。