【发布时间】:2014-04-26 17:00:13
【问题描述】:
代码如下:
$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 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
那么为什么“220 2.0.0 Start TLS”之后的行没有显示?代码有问题还是什么?
还有一件事,而不是最后一行的fwrite($fp, "EHLO my.hostname\r\n");,我使用了其他命令,如QUIT,但结果相同!!
【问题讨论】:
-
“那么为什么“220 2.0.0 Start TLS”之后的行不显示? - 你启动了 TLS。如果您需要测试连接,请尝试
openssl s_client -starttls smtp -connect smtp.mail.yahoo.com:587。浏览器无法为您提供任何有用的信息,因为它不理解STARTTLS命令。