SMTP Telnet和PHP没有得到HELO的任何响应

时间:2013-01-18 02:15:19

标签: php sockets smtp telnet

好的我第一次尝试使用php进行套接字编程,这是我一直想做的事情,但事实上我们在工作中完成的应用程序上的反弹电子邮件跟踪事实加快了这一点不行,所以现在我必须检查整个电子邮件地址,以确保它们有效。

我已经学会了如何通过命令行使用telnet来验证电子邮件地址和发送电子邮件地址,我对此没有任何问题。我倒下的地方是当我使用“HELO”命令与服务器通信时。

但我可能在这里完成了错误的区域,因为我甚至不知道这是否建立了telnet连接,但最后的var转储表明存在连接。

当我使用命令行进行telnet连接时,连接响应是相同的,除了“n6si3992361paw.22”,但我想这是每个连接的某种唯一标识符。

<?php

$target = "aspmx.l.google.com";
$port = 25;
$errno = "";
$errstr = "";
$timeout = 9;
$newline = "\n\r";
$logArray = array();

$connect = fsockopen($target, $port, $errno, $errstr, $timeout);
$smtpResponse = fgets($connect, 4096);
if(empty($connect)) {
   $logArray["error"][] = "Failed to connect: $smtpResponse";
   var_dump($logArray);
   exit;
} else {
   $logArray['connection'][] = "Connected to: $smtpResponse";
}
fputs($connect, "HELO" . $newLine);
$smtpResponse = fgets($connect, 4096);
$logArray['connection'][] = "$smtpResponse";
var_dump($logArray);

$ logArray的结果:

array(1) { ["connection"]=> array(2) { [0]=> string(57) "Connected to: 220 mx.google.com ESMTP n6si3992361paw.22 " [1]=> string(0) "" } }

1 个答案:

答案 0 :(得分:1)

你做了一个简单的拼写错误(PHP变量名称区分大小写)。

比较一下:

$newline = "\n\r";

......用这个:

fputs($connect, "HELO" . $newLine);

使用$newline,而不是$newLine。然后就行了。

另外,正如Casper已经指出的那样,你的CRLF命令是错误的;使用\r\n,而不是相反。