要在发送“EHLO”时使用来自谷歌的示例响应:
250-mx.google.com at your service, [66.501.941.15]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING
十六进制:
32 35 30 2D 6D 78 2E 67 6F 6F 67 6C 6C 65 2E 63 6F 6D 6D 20 61 74 20 79 6F 75 72 20 73 65 65 72 76 69 69 69 65 2C 20 5B 39 5B 39 39 32 2E 34 32 2E 34 32 32 32 32 31 2E 35 35 35 34 32 34 32 32 32 32 32 5DDD 0D 0A 32 35 30 2D 53 49 5A 45 20 33 35 36 35 31 35 38 34 0D 0A 32 35 30 2D 38 42 49 54 4D 49 4D 45 0D 0A 32 35 30 2D 41 55 54 48 20 4C 4F 47 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 4E 45 4E 479A
由于 SMTP 规范规定一行必须以 CR LF (0D 0A) 结尾,我们可以解析这两个字节来查找行,但是我们如何确定响应的结尾呢?
在卫星上,响应可以被分解成碎片,两者之间有很大的延迟。这意味着响应可能在 CR LF 之后结束并且不完整,即:
250-mx.google.com at your service, [66.501.941.15]
250-SIZE 35651584
250-8BITMIME
任何寻找尾随 CR LF 的逻辑都会假设响应是完整的。在这种情况下,我使用 CryptLib 来执行 SLL 隧道,但如果有某种方法可以获得“响应结束”,我可以使用自己的代码创建端口并将其传递给库。