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

时间:2015-03-20 15:36:30

标签: c# email smtp handshake

我有一个简单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

在记事本中查看时看起来像:

enter image description here

然而,代码只是这样写的:

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

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

1 个答案:

答案 0 :(得分:2)

它正在检查整行,其中只有一个.。 这是指示DATA部分结束的标准技术。请参阅here

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