对于我目前正在处理的项目,我们收到了对“dynamic”邮件附件大小限制的要求。 对于后缀(我们目前使用),这将很容易实现使用message_size_limitconfiguration选项。 但是,这防止用户发送附件的电子邮件。 我们的用例需要两个不同的限制。 在某些情况下,应用下限,但这对用户应该是透明的。 他们仍然应该能够发送附件的电子邮件,该附件的尺寸小于最大限制。
所以我们想要阻止“邮件太大”的拒绝邮件,而是排队邮件以便在以后再次尝试发送邮件。 所以当附件的大小限制再次增加时,邮件仍然会被传送给收件人。
对于有时可能连接到慢速卫星上行链路的船只,其他时间连接到高速上行链路,我们需要这种能力。 对于高速上行链路,大附件(<20MB)并不是什么大问题,但对于非常低带宽的卫星连接来说,这成为一个问题,所以我们想要限制附件大小。 但是这对于用户来说是不可见的,因为他不知道当前的上行链路types。
在这里,我假设你有一个机制监视你的服务器的上传状态。 当上行链路改变时,您需要运行下面描述的脚本。
Postfix只在排队消息之前检查消息大小。 行动是200或5XX拒绝 。 有没有自定义的行为,如“嘿后缀请持有这个大消息,直到我们连接到高速上行链路”。
所以,我们需要这里的同伴。 你可以使用postfwd为你做消息大小检查。 当你的消息超过postfwd的限制时,你可以定义自定义操作,比如HOLD操作。 根据man 5访问 ,当HOLD行为应用于消息时
保留可选文本…
将消息放在保留队列中,直到某人将其删除或释放以供传送。 logging可选文本(如果指定),否则logging通用消息。
所以这里的想法:
当您连接到高速上行链路时 ,脚本将在postfwd中设置较高的限制。 然后,脚本必须以root身份发出postsuper命令,以释放来自HOLD队列的电子邮件。
postsuper -H ALL
请注意,在这种情况下,postfwd限制必须大于postfix中的message_size_limit 。 否则,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文档。 这个答案不会覆盖它。