簡體   English   中英

估計新郵件的大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM