Php 为什么在220 2.0.0启动TLS后没有显示任何内容?

Php 为什么在220 2.0.0启动TLS后没有显示任何内容?,php,ssl,smtp,Php,Ssl,Smtp,代码如下: $fp = stream_socket_client("smtp.mail.yahoo.com:587", $errno, $errstr, 10); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { fwrite($fp, "EHLO my.hostname\r\n"); echo fgets($fp, 1024).'<br>'; echo fgets($fp, 102

代码如下:

$fp = stream_socket_client("smtp.mail.yahoo.com:587", $errno, $errstr, 10);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, "EHLO my.hostname\r\n");
    echo fgets($fp, 1024).'<br>';
    echo fgets($fp, 1024).'<br>';
    echo fgets($fp, 1024).'<br>';
    echo fgets($fp, 1024).'<br>';
    echo fgets($fp, 1024).'<br>';
    echo fgets($fp, 1024).'<br>';

    fwrite($fp, "STARTTLS\r\n");
    fwrite($fp, "EHLO my.hostname\r\n");

    echo fgets($fp, 1024).'<br>';
    echo fgets($fp, 101024).'<br>';
}
那么为什么“220 2.0.0启动TLS”之后的行不显示?代码有什么问题吗


还有一件事,而不是
fwrite($fp,“EHLO my.hostname\r\n”)
在最后一行中,我使用了其他命令,如
QUIT
,但结果相同

发送STARTTLS后,通信将进入加密模式,这就是为什么不再使用未加密命令的原因。您可能不想陷入加密邮件的困境——如果您只想发送邮件,可以使用PHPMailer


如果您想自己重建现有功能,请阅读文档或已实现此功能的库,不要只是猜测和询问它是否有效。RFC 5321中描述了SMTP,RFC3207中描述了STARTTLS的行为


只是一些提示:在收到STARTTLS的响应之后,在发送任何其他命令之前,需要执行TLS升级。而且,也不能保证对EHLO的响应正好是5行。

谢谢你的提示,我想我得到了我想知道的;)“那么为什么“220 2.0.0启动TLS”之后的行不显示?”-您启动了TLS。如果需要测试连接,请尝试
openssl s_client-starttls smtp-connect smtp.mail.yahoo.com:587
。浏览器无法提供任何有用的信息,因为它不理解
STARTTLS
命令。
220 smtp.mail.yahoo.com ESMTP ready   
250-smtp.mail.yahoo.com   
250-PIPELINING   
250-SIZE 41697280   
250-8 BITMIME   
250 STARTTLS   
220 2.0.0 Start TLS