2

わかりました、php を使用したソケット プログラミングを初めて試みています。これは、しばらくの間やろうと思っていたものですが、仕事で行ったアプリケーションでバウンスされた電子メールの追跡が機能しなかったという事実によってスピードアップしました。そのため、すべての電子メール アドレスをチェックして、それらが有効であることを確認する必要があります。

コマンド ラインから telnet を使用して電子メール アドレスを検証し、電子メール アドレスを送信する方法を学習しましたが、問題はありません。私が落ち込んでいるのは、「HELO」コマンドを使用してサーバーと通信するときです。

しかし、これがtelnet接続を確立したかどうかさえわからないので、ここでは完全に間違った領域にいる可能性がありますが、最後のvarダンプは接続が確立されていることを示唆しています.

「n6si3992361paw.22」を除いて、コマンドラインでtelnet接続を行ったときの接続応答は同じですが、それは各接続のある種の一意の識別子であると思います。

<?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 に答える