1

私は自分のSMTPクライアントをc#(コンパクトフレームワークで使用するために)作成しています。smtp.gmail.comサーバーを使おうとしています

STARTTLS成功したコマンドの後、smtpクライアントEHLO Command response from server isがempty`を送信した場合。

message = "EHLO 10.192.4.223\r\n";
      Write(message);
      response = Response();
      if (response.Substring(0, 3) != "250")
      {
        throw new SmtpException(response);
      }
      message = "STARTTLS\r\n";
      Write(message);
      response = Response();
      if (response.Substring(0, 3) != "220")
      {
        throw new SmtpException(response);
      }

      message = "EHLO 10.192.4.223\r\n";
      Write(message);
      response = Response();
      if (response.Substring(0, 3) != "250") //empty response
      {
        throw new SmtpException(response);
      }
4

1 に答える 1

2

STARTTLSプレーンテキストコマンドを送信することはもはや想定されていないためです。代わりに、同じ既存の TCP ソケット/接続で TLS で保護された通信に切り替えることになっています。

RFC 2487 - Secure SMTP over TLS の SMTP サービス拡張の内容を参照してください。

STARTTLS コマンドに対する 220 応答を受信した後、クライアントは、
他の SMTP コマンドを発行する前に TLS ネゴシエーションを開始する必要があり
ます。

5.2 STARTTLS コマンドの結果

TLS ハンドシェイクが完了すると、SMTP プロトコルは初期状態 (サーバーが 220
サービス準備完了グリーティングを発行した後の SMTP の状態) にリセットされます。 サーバーは、TLS ネゴシエーション自体から取得されていない
、EHLO コマンドの引数など、クライアントから取得した知識を破棄する必要があります。
クライアントは、TLS ネゴシエーション自体
から取得されなかった SMTP サービス拡張のリストなど、サーバーから取得した知識を破棄する必要があります。 クライアントは、TLS ネゴシエーションが成功した後
、最初のコマンドとして EHLO コマンドを送信する必要があります。

于 2012-10-15T07:24:35.480 に答える