PHPMailer 和匿名 TLS 连接
PHPMailer and anonymous TLS connections
我正在使用 phpmailer 在端口 25 上建立 TLS 连接。
我不能使用 username/password,所以它是匿名连接。
服务器响应如下:
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
)
);
我正在使用 phpmailer 在端口 25 上建立 TLS 连接。 我不能使用 username/password,所以它是匿名连接。
服务器响应如下:
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
)
);