动态限制后缀附件大小

动态限制后缀附件大小

对于我目前正在进行的一个项目,我们收到了一个“动态”邮件附件大小限制的要求。对于 Postfix(我们目前使用的),这可以通过配置选项轻松实现message_size_limit。然而,这会阻止用户发送带有附件的电子邮件。我们的用例需要两个不同的限制。在某些情况下,会应用较低的限制,但这对用户来说应该是透明的。他们仍然应该能够发送带有小于最大限制的附件的电子邮件。

因此,我们希望防止出现“邮件过大”的拒收邮件,而是将邮件排队,以便稍后重新尝试发送。这样,当附件的大小限制再次增加时,邮件仍会发送给收件人。

背景

我们需要这种能力,因为船只有时可以连接到慢速卫星上行链路,有时可以连接到高速上行链路。对于高速上行链路,大型附件(<20MB)不是太大的问题,但对于带宽非常低的卫星连接,这就会成为一个问题,所以我们想限制附件大小。然而,这不应该对用户可见,因为他不知道当前的上行链路类型。

答案1

这里我假设你有一个监控服务器上行链路状态的机制。当上行链路发生变化时,你需要运行下面描述的脚本。

Postfix 仅在将消息排队之前检查消息大小。操作可以是200 接受或者5XX 拒绝。没有自定义操作,例如“嘿,postfix,请保留这条大消息,直到我们连接到高速上行链路”。

因此,我们需要同伴。您可以使用后发为您检查邮件大小。当您的邮件超出 postfwd 的限制时,您可以定义自定义操作,例如抓住行动。根据man 5 访问,当 HOLD 操作应用于消息时

抓住可选文本...

将消息放入保留队列,直到有人将其删除或释放以供传送。如果指定,则记录可选文本,否则记录一般消息。

因此,这里的想法是:

  • 当您连接到慢速上行链路时,将下限放在 postfwd 中。当用户发送的消息超过下限时,postfix 将保留该消息。该消息留在队列中,postfix 不会费心发送它。
  • 当您连接到高速上行链路时,脚本会将上限放在 postfwd 中。然后必须发出脚本后超级命令root从 HOLD 队列中释放电子邮件。

    postsuper -H ALL
    

    注意,此时 postfwd 限制必须大于message_size_limitpostfix 中的限制。否则,postfix 不会拒绝大消息,而是将其保留。

  • 当您再次连接到慢速上行链路时,将下限放在 postfwd 中。

postfwd 的示例规则是

# replace 192.168.1.0/24 with your local network and 12345 with limit size
id=RULE001
    client_address=192.168.1.0/24
    size=12345
    action=HOLD exceed slow link limit

请查阅 postfwd 文档安装和它的规则. 本答案不会涉及此内容。

相关内容