我有一个简单SMTP事务的日志。 (它有点长,所以访问它here)。它显示了低级别握手的交换,例如HELO
,MAIL
等。
当应该接收电子邮件的服务器准备好接受电子邮件数据时,它会发送以下内容(日志中的第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>
的内容,只检查点(.
)...?
答案 0 :(得分:2)
它正在检查整行,其中只有一个.
。
这是指示DATA部分结束的标准技术。请参阅here。
此外,正如@jstedfast指出的那样,StreamReader.ReadLine()
方法从它返回的字符串中删除了"\r\n"
行尾行序列,因此在这种情况下,结果字符串将为{{ 1}}