0

PHP 経由で yahoo 受信者にメールを送信しようとしています。yahoo に接続するたびに、受信者アドレスが存在しない場合でも、250 ステータス コードが表示されます。yahoo から正しいステータス コードを取得するスクリプトを見つけましたが、スクリプトで行った違いや間違いを見つけることができません。さまざまなコマンドを送信して、いくつかのサーバーでスクリプトを実行しようとしましたが、RCPT-TO-command に対して常に 250 応答が返されます。正しい応答が得られないのはなぜですか? 受信者が存在しないときにスクリプトを停止したい!

正しい応答を取得する verify-email.org のログ:

yahoo.com に関する MX レコードが存在します。
g.m.mail.yahoo.com SMTP への接続に成功しました。
=220 mta1062.mail.sp2.yahoo.com ESMTP YSmtp サービス準備完了
> HELO verify-email.org
=250 mta1062.mail.sp2.yahoo.com
> メール送信元: <check@verify-email.org>
=250 送信者 <check@verify-email.org> OK
> RCPT TO: <sdjrfvn3r@yahoo.com>
=554 配信エラー: dd このユーザーは yahoo.com アカウント (sdjrfvn3r@yahoo.com) を持っていません [0] - mta1062.mail.sp2.yahoo.com

間違った応答を受け取るスクリプトのログ:

C h.mx.mail.yahoo.com に接続する
S 220 mta1144.mail.mud.yahoo.com ESMTP YSmtp サービス準備完了
C HELO my-domain.com
S 250 mta1144.mail.mud.yahoo.com (152.70 ミリ秒)
C メール FROM: <existing-address@my-domain.com>
S 250 送信者 <existing-address@my-domain.com> OK (723.29 ミリ秒)
C RCPT TO: <sdjrfvn3r@yahoo.com>
S 250 受信者 <sdjrfvn3r@yahoo.com> OK (152.67 ミリ秒)
C ソケット接続を閉じる
S 接続は正常に閉じられました

適切に動作するスクリプトは、http: //verify-email.orgで見つけることができます。

私のスクリプト:

    while(preg_match('/^\d\d\d-/', $r = fgets($sock))) {
        $response .= $r;
    }
    $response .= $r;

    return $response;
}

$mxRecord = "a.mx.mail.yahoo.com";
$domain = 'example.com';
$mailFrom = 'mailfrom@example.com';
$rcptTo = 'doesntexist2011@yahoo.com';

$commands = array(
    "HELO ".$domain."\r\n",
    "MAIL FROM: <".$mailFrom.">\r\n",
    "RCPT TO: <".$rcptTo.">\r\n",
//  "DATA\r\n",
//  ... email subject and content
//  ".\r\n",
    "QUIT\r\n"
);

if($sock = fsockopen($mxRecord, 25, $errno, $errstr, 30)) {
    foreach($array as $cmd) {
        echo htmlentities($cmd);
        echo '<br />';
        fwrite($sock, $cmd);
        echo htmlentities(getResponse($sock));
        echo '<hr />';
    }

    fclose($sock);
}
else {
    echo 'no connection';
}
?>

いくつかの情報:

  • 独自のドメインを使用しました (example.com ではありません)
  • スクリプトは、私のドメインが参照するサーバーにあります
  • サーバーは、spamhaus.org のようなブラックリストに載っていません。
  • 「Mail From」に使用したメールアドレスが存在する
  • getmxrr() を使用して、yahoo.com の mx エントリを取得します。
  • HELO と EHLO を試しました -> 常に同じ応答
4

2 に答える 2

6

verify-email.org でお金を無駄にしないでください。私は、電子メール アドレスの検証に非常にうまく機能するクラスを作成しましたが、250 Recipient OK メッセージ以外の Yahoo から何かを返そうとすると、何日も問題に悩まされていました。残念ながら、サーバーに約10回アクセスした後、12時間ブロックされた後、ここで共有する回避策を最終的に思いつきました. 次に、クラスを開発サーバーから、適切なドメイン名、rDNS が構成されたライブサーバーに移動し、ブラックリストに登録されずにドメインキーを差し引いて電子メールを送信できるようにしました。繰り返しますが、SMTP で 250 の応答しか得られず、回避策で IP がブロックされました。私は最終的に、「彼らが何をしているのかを見る」ために、スクリプトを分解して購入することにしました。答え: 彼らは何も変わっていません。実際には、スクリプトはゴミであり、オンラインで見つけることができる基本的なスクリプトとほとんど同じでした. 私はそれを2つの異なるサーバーにロードし、2つの異なる構成で、スクリプトの指示に従って(1つまたは2つの指示のみでした)、554を受け取ったのとまったく同じ電子メールアドレスに対して同じ250応答を受け取りましたサイトに。もう少し掘り下げてみると、スクリプトを販売している電子メール マーケティング会社である可能性があることがわかりました。彼らはYahooなどと関係を持っているか、他のバックエンドシステムを呼び出しているかのどちらかです。わかりませんが、スクリプトが機能しないことは知っています。さらに、販売者と SWREG (デジタル リバー会社) に送信された電子メールと払い戻しの要求は応答されていません。結果とサイトに表示されるもののスクリーンショットを送信しました。現在、クレジット カード会社に異議を申し立てています。つまり、verify-email.org から購入しないでください。それは詐欺です。それは、45 ドルを無駄にしたくない場合を除きます。

私の唯一のアドバイスは、メジャーとビジネス関係を結ぶか、ReturnPath のような会社を経由することです (非常に高価です)。または、各加入者に確認メールを送信することです。残念ながら、アフィリエイトパートナーとのルールに基づいて確認メールを送信できないマーケティング会社で働いているため、サードパーティのサービス (高価) を使用するか、別のソリューションを考え出す必要があります。幸運を。

于 2011-12-31T20:01:20.567 に答える
1

verify-email.org の FAQ は読みましたか? 「一部のドメインでは、メール サーバーが連携していないため、アドレスが正しいかどうかを確認できません。例: yahoo.com」

これは、これらのメール サーバーが、スパマーが既知の適切なメール アドレスを収集することを望んでいないためです。

于 2011-02-05T21:45:26.190 に答える