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