在发送电子邮件时,我发现有关点填充的信息相互矛盾。
- 如果该行包含一个点,则填充一个点(以避免提前终止)
- 在每行填充一个点 stat 以点开头
- 将一个点填充到 (1) 和引用的可打印消息部分的每一行部分
谁能澄清一下?
根据 SMTP 标准 RFC 5321,第 4.5.2 节:
https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2
为了允许所有用户编写的文本透明地传输,使用了以下过程:
- 在发送一行邮件文本之前,SMTP 客户端会检查该行的第一个字符。如果是句点,则在行首插入一个附加句点。
- 当 SMTP 服务器接收到一行邮件文本时,它会检查该行。如果该行由单个句点组成,则将其视为邮件结束指示符。如果第一个字符是句点并且该行还有其他字符,则删除第一个字符。
所以,从你问题的三点来看,第二点是对的。
实际答案:如果您使用引用的可打印格式,则始终将点转换为 = 2E。您不能依赖所有 smtp 服务器正确地进行点删除。
如果您想假设整个世界都符合标准,那么请使用上面的答案 2。
在 SMTP 协议中,邮件由一个点和一个换行符终止
简单来说,例如:
\r\n。\r\n
那些角色:
CR LF 点 CR LF
这对应于一行开头的一个点。
如果邮件数据包含单个 . 在行首,后跟一个换行符,然后 SMTP 协议将其视为邮件终止,因此只会传递一部分邮件。
所以整个想法是通过填充一个额外的点来避免这种情况。