16

在发送电子邮件时,我发现有关点填充的信息相互矛盾。

  1. 如果该行包含一个点,则填充一个点(以避免提前终止)
  2. 在每行填充一个点 stat 以点开头
  3. 将一个点填充到 (1) 和引用的可打印消息部分的每一行部分

谁能澄清一下?

4

3 回答 3

30

根据 SMTP 标准 RFC 5321,第 4.5.2 节:

https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2

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

  • 在发送一行邮件文本之前,SMTP 客户端会检查该行的第一个字符。如果是句点,则在行首插入一个附加句点。
  • 当 SMTP 服务器接收到一行邮件文本时,它会检查该行。如果该行由单个句点组成,则将其视为邮件结束指示符。如果第一个字符是句点并且该行还有其他字符,则删除第一个字符。

所以,从你问题的三点来看,第二点是对的。

于 2013-04-16T09:47:19.800 回答
5

实际答案:如果您使用引用的可打印格式,则始终将点转换为 = 2E。您不能依赖所有 smtp 服务器正确地进行点删除。

如果您想假设整个世界都符合标准,那么请使用上面的答案 2。

于 2016-07-19T00:41:54.057 回答
0

在 SMTP 协议中,邮件由一个点和一个换行符终止

简单来说,例如:

\r\n。\r\n

那些角色:

CR LF 点 CR LF

这对应于一行开头的一个点。

如果邮件数据包含单个 . 在行首,后跟一个换行符,然后 SMTP 协议将其视为邮件终止,因此只会传递一部分邮件。

所以整个想法是通过填充一个额外的点来避免这种情况。

于 2013-03-07T11:28:39.210 回答