首先我要说的是,我不是一名 IT 人员,但是在办公室里我被迫从事这一职业。
我办公室有人向 aol.com 的某人发送了一个 86MB 的电子邮件附件,aol.com 拒绝了这封电子邮件,可能是因为附件太大。当我查看日志时,我每隔 10-20 分钟就会看到“响应发送数据块而关闭连接”,我猜是因为 exim4 试图不断重新发送它。这种情况已经持续了 3 天,你可以猜到它已经占用了大量带宽。
为什么经过这么多次尝试失败后,exim4 仍没有停止发送这封电子邮件?
我需要更改哪些配置选项来设置放弃此类失败的失败尝试次数?
答案1
首先给出错误。由于此类 smtp 到 smtp 失败可能由于许多网络连接问题而发生
- 防火墙进行数据包过滤
- 任何其他安全设备,或
- 防毒软件
- 或者在邮件服务器上配置其他策略
大多数情况下,这种故障可能是由于收件人电子邮件服务器在处理附件大小不可接受的邮件时停滞所致。此后,收件人系统停止接受新的 SMTP 数据,并且在预定时间之后,SMTP 连接超时。
为了防止这种情况,您需要调整默认值retry-rules
。
- 默认重试规则
配置文件的重试部分包含影响 Exim 重试无法在第一次尝试中完成的交付的方式的规则。它由以下行引入
Exim 默认重试规则如下:
开始重试
在默认配置中,只有一条规则,适用于所有错误:
- F,2小时,15分钟;G,16小时,1小时,1.5;F,4天,6小时
这将导致任何暂时失败的地址每 15 分钟重试一次,持续 2 小时,然后以 1 小时为间隔,以 1.5 倍的倍数增加,直到 16 小时过去,然后每 6 小时重试一次,最多 4 天。如果地址在暂时失败 4 天后仍未送达,则会被退回。
如果重试部分从配置中删除,或者为空(即未定义重试规则),Exim 将不会重试交付。这会将临时错误变成永久错误。
你可以根据需要调整这些值。以下是官方参考:http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_default_configuration_file.html#SECID57
这里也是一个很好的解释。
答案2
根本问题是您已接受要中继的消息,而接收方服务器在接受该消息时遇到问题。通常,接收方服务器会说“550 消息大小太大”或类似的话,exim 不会重试,而是转而尝试通过向发送者发送退回消息来通知发送者他的 86 MB 消息有问题。
但这里并没有发生这种情况,处理消息时存在一个定义不明确的问题,可能是因为消息太大了。通常,接收服务器将使用 ESMTP 协议,该协议允许在消息实际通过网络之前拒绝超过一定大小的消息,但 AOL 的服务器似乎不支持这一点,因此他们试图接受它,但由于 AOL 服务器管理员可能理解或可能不理解的某些原因而严重失败。
由于 Exim 不知道如何处理这个定义不明确的问题,它会继续尝试发送邮件五天(默认配置)。在此之前,您有两个选项可以阻止这种骚扰:使用exim -Mg $messageid
会将邮件退回给发件人,或者exim -Mrm $messageid
直接将邮件从队列中删除。我更喜欢第一个,但错误消息似乎显示为“管理员取消”,而我更喜欢“响应发送数据块而关闭连接”加上“管理员缩短默认超时时间”。
为了避免再次发生这种情况,您可能应该在服务器上定义一个大小限制,这样您就不会接受收件人可能拒绝的过大邮件。该参数称为 message_size_limit,可能已经存在于您的配置中。使用 exim 非常完整的配置可能性,如果您愿意,您可能可以仅为发往 AOL 的邮件定义一个限制。一般情况下,10 或 20 MB 是常见的。