1

「EHLO」が送信されたときの Google からの応答例を使用するには:

250-mx.google.com at your service, [66.501.941.15]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING

16 進数:

32 35 30 2d 6d 78 2e 67 6f 6f 67 6c 65 2e 63 63 6f 6d 20 61 74 20 79 6f 75 75 72 20 73 65 72 76 69 63 65 2c 20 5b 39 32 2e 34 32 31 2e 35 36 35 2e 34 34 32 5d 5d 0d 0a 32 35 30 2d 53 49 5a 45 20 33 35 36 35 31 35 35 38 34 0D 0A 32 35 30 2D 38 42 42 49 54 4D 49 4D 45 0D 0A 32 35 30 2D 41 55 54 48 20 4C 4F 47 49 49 4E 20 50 4C 41 49 4E 0D 0A 32 35 30 2D 45 4E 48 41 4E 43 45 44 53 54 41 54 55 53 43 4F 44 45 53 0D 0A 32 35 30 20 50 49 D 50 45 4E 7 49

SMTP 仕様では、行は CR LF (0D 0A) で終了する必要があると規定されているため、これらの 2 バイトを解析して行を見つけることができますが、応答の終わりをどのように判断すればよいでしょうか?

衛星経由では、応答がバラバラになり、その間に大きな遅延が生じる可能性があります。これは、CR LF の後に応答終了し、完了していない可能性があることを意味します。

250-mx.google.com at your service, [66.501.941.15]
250-SIZE 35651584
250-8BITMIME

後続の CR LF を探すロジックは、応答が完了したと見なします。この場合、CryptLib を使用して SLL トンネルを実行していますが、「応答の終了」を取得する方法があれば、独自のコードでポートを作成してライブラリに渡すことができます。

4

2 に答える 2

8

応答は、250 と名前の間にハイフンがない行で終了します。

したがって、行の 4 番目の文字がスペースの場合、それが応答の最後の行になります。

RFC 2821のセクション 4.2.1 から:

複数行の返信の形式では、最後の行を除くすべての行が返信コードで始まり、直後にハイフン "-" (マイナスとも呼ばれる) が続き、その後にテキストが続く必要があります。最後の行は応答コードで始まり、すぐに < SP >、オプションでいくつかのテキスト、および < CRLF > が続きます。

于 2009-11-19T22:27:12.850 に答える
3

これは、SMTP プロトコルの複数行の返信です ( RFC 821付録 E で説明されています) 。

最初の行が次のようにフォーマットされていることに気付くでしょう。

CODE-FirstLine
CODE-SecondLine

ただし、最後の行は次のようにフォーマットされています。

CODE LastLine

各行は、説明したように CRLF で区切られていますが、コードとテキストが - (マイナス) で区切られていない場合、複数行の返信の最後の行にいることがわかります。

于 2009-11-19T22:28:02.790 に答える