了解 SMTP 中电子邮件的传输结束

Understand end of transmission of email message in SMTP

我有一个简单的 SMTP 事务日志。 (它有点长,所以访问它 here)。它显示了HELOMAIL等低级握手的交换

当应该接收电子邮件的服务器准备好接受电子邮件数据时,它会发送以下内容(日志中的第 12 行):

RawSmtp Information: 0 : << 354 Start mail input; end with <CRLF>.<CRLF>

然而,传输的结尾有点混乱(第 74/75 行):

RawSmtp Information: 0 : >> cannot foresee
RawSmtp Information: 0 : >> 
RawSmtp Information: 0 : << 250 OK

在记事本中查看时如下所示:

然而,代码简单地写成这样:

                            WriteResponse(writer, "354 Start mail input; end with <CRLF>.<CRLF>");
                            string line;
                            while ((line = reader.ReadLine()) != null && line != ".")
                            {
                                //do stuff
                            }

这是标准吗?我的意思是发送类似 <CRLF>.<CRLF> 的内容,只检查点 (.)...?

它正在检查其中只有 . 的整行。 这是指示数据段结束的标准技术。参见 here

此外,正如@jstedfast 指出的那样,StreamReader.ReadLine() 方法从 returns 的字符串中删除了 "\r\n" 行尾序列,因此在这种情况下,结果字符串将是 "."