Email

動態限制後綴附件大小

  • September 2, 2015

對於我目前正在進行的一個項目,我們收到了對“動態”郵件附件大小限制的要求。對於後綴(我們目前使用的),這可以使用message_size_limit配置選項輕鬆實現。但是,這會阻止使用者發送帶有附件的電子郵件。我們的案例需要兩個不同的限制。在某些情況下,應用了下限,但這對使用者應該是透明的。他們仍然應該能夠發送帶有小於最大限制的附件的電子郵件。

因此,我們希望防止“郵件太大”的拒絕郵件,而是將郵件排隊等待稍後重新嘗試投遞。因此,當附件的大小限制再次增加時,郵件仍會傳遞給收件人。

背景

對於有時可以連接到慢速衛星上行鏈路、有時連接到高速上行鏈路的船隻,我們需要這種能力。對於高速上行鏈路,大型附件(<20MB)並不是什麼大問題,但對於頻寬非常低的衛星連接,這就會成為問題,因此我們要限製附件大小。然而,這不應該對使用者可見,因為他不知道目前的上行鏈路類型。

在這裡,我假設您有一個監控伺服器上行鏈路狀態的機制。當上行鏈路發生變化時,您需要執行下述腳本。

Postfix 僅在將消息排入隊列之前檢查消息大小。操作是200 accept5XX reject。沒有自定義操作,例如“嘿,postfix,請保留這條重要資訊,直到我們連接到高速上行鏈路”。

所以,我們這裡需要同伴。您可以使用postfwd為您進行郵件大小檢查。當您的消息超出 postfwd 的限制時,您可以定義自定義操作,例如HOLD操作。根據man 5 access,當 HOLD 操作應用於消息時

保持可選文本…

> > 將消息放在保留隊列中,直到有人刪除它或釋放它以進行傳遞。如果指定,則記錄可選文本,否則記錄一般消息。 > > >

所以這裡的想法:

  • 當您連接到慢速上行時,請將下限放入 postfwd。當使用者發送消息超過下限時,postfix 會 HOLD 。它留在隊列中,postfix 不會費心傳遞它。
  • 當您連接到高速上行鏈路時,腳本會將上限設置在 postfwd 中。然後腳本必鬚髮出postsuper命令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 文件。這個答案不會涵蓋它。

引用自:https://serverfault.com/questions/718498