PHPMailer和匿名TLS连接

时间:2016-03-24 17:01:11

标签: smtp phpmailer tls1.2

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

2 个答案:

答案 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
    )
);