2

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

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

但是我可能在这里完全错误的区域,因为我什至不知道这是否已经建立了 telnet 连接,但最后的 var dump 表明正在建立一个连接。

除了“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) "" } }
4

1 回答 1

1

您犯了一个简单的错字(PHP 变量名区分大小写)。

比较一下:

$newline = "\n\r";

... 有了这个:

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

使用$newline,不使用$newLine。然后它工作。

此外,正如 Casper 已经指出的那样,您的 CRLF 顺序错误;使用\r\n,而不是相反。

于 2013-01-30T13:34:03.857 回答