了解 SMTP 中电子邮件的传输结束
Understand end of transmission of email message in SMTP
我有一个简单的 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>
的内容,只检查点 (.
)...?
它正在检查其中只有 .
的整行。
这是指示数据段结束的标准技术。参见 here。
此外,正如@jstedfast 指出的那样,StreamReader.ReadLine()
方法从 returns 的字符串中删除了 "\r\n"
行尾序列,因此在这种情况下,结果字符串将是 "."
我有一个简单的 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>
的内容,只检查点 (.
)...?
它正在检查其中只有 .
的整行。
这是指示数据段结束的标准技术。参见 here。
此外,正如@jstedfast 指出的那样,StreamReader.ReadLine()
方法从 returns 的字符串中删除了 "\r\n"
行尾序列,因此在这种情况下,结果字符串将是 "."