[英]Estimate the size of a new mail
我們有一個配置了message_size_limit=10240000
(默認值)的 postfix 服務器,我現在想阻止創建任何大於該值的郵件。 因為否則我會收到“連接中斷”錯誤,這很難在有意義的錯誤消息中呈現給用戶。
message_size_limit
的定義是:
消息的最大字節數,包括信封信息。
我的問題是:如何計算/預測/估計帶有大量不同附件的已創建郵件的大小(以字節為單位)? javax.mail.Message.size()
僅在接收郵件時可用。
獲取草稿 Message 對象並使用Message.writeTo
將其寫入一個流,該流對數據不執行任何操作,只計算寫入的字節數:
public long getMessageSize(Message message) {
CountingOutputStream counter = new CountingOutputStream(new NullOutputStream());
message.saveChanges();
message.writeTo(counter);
return counter.getByteCount();
}
CountingOutputStream
來自commons-io ,但來自Guava或較慢的ByteArrayOutputStream
也可以。
這將為您提供對消息整體大小的估計。
這樣做會很昂貴,所以你不能(例如)對用戶輸入到消息中的每個字符都這樣做。 您只需要在某些事件(例如,添加附件)或在(例如)將數據輸入消息 5 分鍾后執行此操作。 您需要一種策略來降低運營成本,同時向用戶提供及時的反饋。
如果您這樣做,請確保在每次調用Message.saveChanges
之前以及在真正發送消息之前調用Message.writeTo
。
有些人沒有意識到的一件事是二進制附件始終是base64
編碼的,有時甚至是 ASCII 附件。 由於編碼過程,任何K
字節的附件最終都會大33%
。 所以你需要知道配置服務器的人是否考慮到了這一點。
否則,看起來少於廣告最大值的電子郵件可能會更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.