我写了一个电子邮件客户端,并且不时注意到一些收到的邮件中的链接失败,因为 URL 中应该有一个点的两个点。

通过调查,我发现在所有这些情况下,两个点都位于一行引用打印的 HTML 的开头。

在阅读 RFC 2821 时,我发现这可能是由于点填充而发生的。我的问题基本上是,谁应该做点填充,谁应该删除它?

如果我们采取一个简单的序列,我们有如下:

  A ----> B ----> C ----> D

其中 A 是发送客户端,B 是 A 向其发送邮件的 SMTP 服务器,C 是收件人的 SMTP 服务器,D 是接收客户端。

RFC 2821 似乎说如果一行以点开头,A 应该添加一个额外的点,而 B 应该删除它(这对我来说很有意义)。然而,我在实践中观察到的是,如果 A 忘记了,B 会添加一个点,否则什么都不做。到达 D 的邮件没有删除多余的点。我是否误解了 RFC,因此 D 的工作是删除多余的点吗?

最佳答案

请引用SMTP标准RFC2821第4.5.2节:

http://tools.ietf.org/html/rfc2821#section-4.5.2

允许所有用户编写的文本透明传输,
使用以下程序:

  • 在发送一行邮件文本之前,SMTP 客户端检查
    行的第一个字符。如果是句号,再加一个
    句号插入行首。
  • 当 SMTP 服务器收到一行邮件文本时,它会检查
    线。如果该行由单个句点组成,则为
    视为邮件结束指示符。如果第一个字符是
    句号,该行还有其他字符,第一个
    字符被删除。
  • 关于SMTP 点填充 - 谁做的和谁删除它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8971703/

    10-15 03:05