動態限制後綴附件大小
對於我目前正在進行的一個項目,我們收到了對“動態”郵件附件大小限制的要求。對於後綴(我們目前使用的),這可以使用
message_size_limit
配置選項輕鬆實現。但是,這會阻止使用者發送帶有附件的電子郵件。我們的案例需要兩個不同的限制。在某些情況下,應用了下限,但這對使用者應該是透明的。他們仍然應該能夠發送帶有小於最大限制的附件的電子郵件。因此,我們希望防止“郵件太大”的拒絕郵件,而是將郵件排隊等待稍後重新嘗試投遞。因此,當附件的大小限制再次增加時,郵件仍會傳遞給收件人。
背景
對於有時可以連接到慢速衛星上行鏈路、有時連接到高速上行鏈路的船隻,我們需要這種能力。對於高速上行鏈路,大型附件(<20MB)並不是什麼大問題,但對於頻寬非常低的衛星連接,這就會成為問題,因此我們要限製附件大小。然而,這不應該對使用者可見,因為他不知道目前的上行鏈路類型。
在這裡,我假設您有一個監控伺服器上行鏈路狀態的機制。當上行鏈路發生變化時,您需要執行下述腳本。
Postfix 僅在將消息排入隊列之前檢查消息大小。操作是200 accept或5XX reject。沒有自定義操作,例如“嘿,postfix,請保留這條重要資訊,直到我們連接到高速上行鏈路”。
所以,我們這裡需要同伴。您可以使用postfwd為您進行郵件大小檢查。當您的消息超出 postfwd 的限制時,您可以定義自定義操作,例如HOLD操作。根據man 5 access,當 HOLD 操作應用於消息時
保持可選文本…
> > 將消息放在保留隊列中,直到有人刪除它或釋放它以進行傳遞。如果指定,則記錄可選文本,否則記錄一般消息。 > > >
所以這裡的想法:
- 當您連接到慢速上行時,請將下限放入 postfwd。當使用者發送消息超過下限時,postfix 會 HOLD 。它留在隊列中,postfix 不會費心傳遞它。
- 當您連接到高速上行鏈路時,腳本會將上限設置在 postfwd 中。然後腳本必鬚髮出postsuper命令
root
以從 HOLD 隊列中釋放電子郵件。postsuper -H ALL
請注意,在這種情況下,postfwd 限制必須大於
message_size_limit
postfix 中的限制。否則,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