Exim发送失败“421 SMTP传入数据超时” – 邮件正文末尾缺less'\ n'

我试图找出这个问题是如何发生的,以及如何阻止它。 不知何故消息最终没有任何\ n进入我们的入站Exim假脱机。 当我们的出境Eximstream程试图传递这些邮件时,它们将以Exim输出的forms失败。 与刚发送的那一行相同。 我通过使用tcpdump捕获来自双方的SMTP对话来validation了这一点

tcpdump显示最后发送的内容如下:

<! – WWW。 https://example.com– > <! – www。 https://example.com– >。

这不是数据的正确终止。 最终接收MTA响应

421丢失传入连接

通过od传递消息到spool中,我在消息体的末尾看到:

0011700 e。 com – – >

没有\ ns。 这些消息卡在假脱机似乎只是垃圾邮件。 我在出站日志中看到,

1NLolk-0003aD-3V == [email protected] R =存储T =存储延迟(-46):数据结束后,来自远程邮件服务器的SMTP错误:主机192.168.1.3 [192.168.1.3]:421 mda.local SMTP传入数据超时 – closures连接。

有没有人有任何想法? “message_suffix”参数听起来像是一个好的bandaid,但它只适用于appendfile和pipe。

我咨询了Exim邮件列表,看起来问题在于MailScanner的内容filter。 我们有MailScanner为我们进行病毒/垃圾邮件扫描,当它清理邮件的尾部时,似乎在某些邮件上, \n被遗漏,并且邮件被放入出站Exim队列中,使Exim交付。 在尝试结束SMTP DATA传输之前,Exim并没有断言它已经发送了\n . ,一些Exim开发者目前正在争论。

我认为垃圾邮件发送者是这样做的,希望您的邮件服务器能够反馈完整的邮件(您的SMTP服务器遵循规则,以便将\ n添加到“答复”中列出的无辜人员身上)。

为了解决这个问题,你需要通过检查发件人的IP没有在RBL列表中列出, SPFlogging是否匹配等方式来更积极地使用反垃圾邮件。

另一个想法是每天晚上用脚本清理这些死信息的队列。 我不知道Exim是否足够build议如何做到这一点…

HTH