SMTP:\r\n\r(不带第二个\n)作为双换行符

SMTP:\r\n\r(不带第二个\n)作为双换行符,smtp,newline,rfc,Smtp,Newline,Rfc,我有一个SMTP解析器,它工作得很好。从第三方软件接收流量时出现问题,该软件以“\r\n\r”(不带第二个“\n”)的形式发送双换行符。目前,此类连接被终止为不兼容的SMTP。有人能解释一下RFC对这种“有趣”的双新词到底说了些什么吗?我能判断一下发送这样的数据的软件确实做错了什么吗?各种操作系统都有不同的换行符表示法。检查一下。顺便说一句,程序员通常同时使用\n和\r来防止系统上的任何冲突。您需要检查系统支持哪个换行符。如果其\r,则您将获得所需的两个字符。但是如果其\n,则错误在于发送方。R

我有一个SMTP解析器,它工作得很好。从第三方软件接收流量时出现问题,该软件以“\r\n\r”(不带第二个“\n”)的形式发送双换行符。目前,此类连接被终止为不兼容的SMTP。有人能解释一下RFC对这种“有趣”的双新词到底说了些什么吗?我能判断一下发送这样的数据的软件确实做错了什么吗?

各种操作系统都有不同的换行符表示法。检查一下。顺便说一句,程序员通常同时使用
\n
\r
来防止系统上的任何冲突。您需要检查系统支持哪个换行符。如果其
\r
,则您将获得所需的两个字符。但是如果其
\n
,则错误在于发送方。

RFC2821。第2.3.7节:

SMTP命令和,除非更改 通过服务扩展,消息
数据以“线”的形式传输。 行由零个或多个数据组成
以序列结尾的字符 ASCII字符“CR”(十六进制值0D) 紧接着是ASCII码 字符“LF”(十六进制值0A)


--戴夫

我问之前读过维基百科,这就是我问的原因。我可以理解接受\n\n和\r\r和\r\n\r\n作为双换行符的原因,但是\r\n\r看起来很奇怪。首先使用Windows新行,然后使用MacOS9新行。“\r\n\r”的问题是您不知道有多少换行符。三个?两个?RFC后来说:“SMTP客户端实现不得传输这些字符,除非它们是作为行终止符使用的,然后,如上所述,必须仅作为序列传输。”由于RFC明确要求,我认为可以安全地假设,不需要理解发送数据的应用程序。我仍然不明白申请以有趣的方式发送新行的理由。