是否可以禁用 Exim 中的重试机制

是否可以禁用 Exim 中的重试机制

我有一个非常简单的 Exim 配置,它只是将所有邮件转发到一组目标地址。当立即投递到某个地址失败时,该邮件将被添加到队列中(然后由重试规则处理)。我想改变这一点,以便如果立即投递失败,则邮件为 :blackhole:d。(如果生成退回邮件也没关系,因为我只需将退回邮件重定向到 :blackhole:)。

这需要在临时故障(即 4xx)和永久故障(即 5xx)时发生。

我理解这意味着如果不能立即送达,消息将永久且不可挽回地丢失。在这个特定情况下,这不是问题。

读完这篇文章,它听起来很像“我如何改进我的垃圾邮件 Exim 服务器”。这实际上不是我的目的,如果你能找到一种方法来证明这一点,我很乐意这样做!

答案1

进出口银行广泛的配置用于设置重试次数。在您的 exim.conf 中,底部附近会有一个重试部分。重试配置包括三个字段:电子邮件地址、导致失败的错误代码和时间模式列表。这些定义为一组三个数字:字母行为代码、应用此规则的时间长度和重试间隔。例如:

F,2h,15m

可以理解为“2小时内,每15分钟尝试一次固定内部”,

您可以尝试设置一个空的重试:

begin retry
*    *    

这可能会让 exim 感到不快。相反,你可以使用一分钟的单次重试:

begin retry
*    *    F,1m,1m

这不完全是您所要求的,但非常接近。

您还可以选择针对特定电子邮件地址和不同的返回代码进行更改。

答案2

将重试时间设置为非常长,执行 cron 脚本从长度大于 x 的队列中提取消息 ID exim -bpu,然后使用exim -Mrm <msgid>

您也可以使用 将 exim 作为非排队守护进程运行mua_wrapper = true。请参阅第 48 节“使用 Exim 作为非排队客户端”,它可能会满足您的需要。

当传递失败时,错误消息将写入标准错误流(以及 Exim 的日志),并且 Exim 退出并返回调用者,返回码值为 1。该消息将从 Exim 的假脱机文件中删除。不会生成任何退回消息。

不维护任何重试数据,并且忽略任何重试规则。

答案3

您可以system_filter在 exim.conf 中设置选项吗?之后,在配置系统过滤文件中,创建一条如下规则:

if not first_delivery then
seen finish
endif

第一次投递后,exim会将消息再次放入队列,但当再次尝试处理时,它将被丢弃。

相关内容