SMTP点填充 - 谁做了,谁删除它

时间:2012-01-23 12:35:47

标签: smtp smtpclient

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:7)

请参阅SMTP标准RFC2821第4.5.2节:

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

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

  • 在发送一行邮件文本之前,SMTP客户端会检查   该行的第一个字符。如果是一个时期,还有一个   句号插入行的开头。

  • 当SMTP服务器收到一行邮件文本时,它会进行检查   这条线。如果该行由单个句点组成,则为   作为邮件指示符的结尾处理。如果第一个字符是a   期间和行上还有其他字符,第一个   字符已删除。