[英]SMTP Telnet and PHP not getting any response from HELO
好的,我第一次嘗試使用php進行套接字編程,這是我一段時間以來一直想做的事情,但是由於我們對在工作中完成的應用程序的退回電子郵件跟蹤不起作用而加速了,因此,現在我必須檢查整個電子郵件地址,以確保其有效。
我已經學會了如何通過命令行使用telnet來驗證電子郵件地址並發送電子郵件地址,而我對此沒有任何問題。 當我使用“ HELO”命令與服務器通信時,我會崩潰。
但是我可能在錯誤的地方,因為我什至不知道它是否建立了telnet連接,但最后的var dump顯示正在建立連接。
當我通過命令行進行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) "" } }
您做了一個簡單的錯字(PHP變量名稱區分大小寫)。
比較一下:
$newline = "\n\r";
... 有了這個:
fputs($connect, "HELO" . $newLine);
使用$newline
,而不是$newLine
。 然后就可以了。
同樣,正如卡斯珀已經指出的那樣,您的CRLF順序錯誤; 使用\\r\\n
,而不是其他方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.