我在 Debian 9 上有一个运行 8.15.2 版本的 Sendmail MTA,它可以为单个域中继邮件。我的问题是,当服务器在标题和 DATA 命令之后的任何时候遇到 . 时,它会终止邮件连接,根据 RFC 5321 的规定,这是应该的。这可能发生在多部分消息的边界结束之前,从而有效地截断包括附件在内的任何其他内容。(例如,如果在带有附件的 HTML 多部分中遇到 .,则所有剩余的 HTML 内容(包括任何其他多部分对象(如附件))都将被截断)。
我感到困惑的是,其他组织的其他 MTA(例如 Exchange)将收到相同的消息并处理内容而不进行任何截断。 (我假设他们正在等待 EOF。)
我尝试confIGNORE_DOTS',
在 m4 sendmail 配置中定义(true'),但没有成功,但是,我知道这个配置在服务器操作期间基本上被忽略,并且旨在用于从命令行进行本地传输。
我能想到的唯一其他选择是在 Sendmail 处理之前将任何 . 编码为十六进制(即 2E),但是我无法在网上找到任何示例。
我假设其他 MTA(例如 Postfix 或 Exim)也会遇到同样的问题。
如果需要的话,我可以发布Sendmail的配置文件和服务器运行时参数。
任何帮助我都深表感谢。
答案1
sendmail(SMTP/MTA)服务器按照 RFC 描述的方式屏蔽消息本身中的“单点”行。
最有可能的是,您没有提供一些重要的“细节”。
4.5.2. 透明度
如果没有提供数据透明性,字符序列“.”将结束邮件文本,用户无法发送。一般来说,用户不知道这种“禁止”序列。为了允许透明地传输所有用户编写的文本,使用以下步骤:
o 在发送邮件文本行之前,SMTP 客户端会检查该行的第一个字符。如果是句点,则会在该行开头插入一个额外的句点。
o 当 SMTP 服务器收到一行邮件文本时,它会检查该行。如果该行由一个句点组成,则将其视为邮件结束指示符。如果第一个字符是句点,并且该行还有其他字符,则删除第一个字符。