gpt4 book ai didi

java - 估计新邮件的大小

转载 作者:行者123 更新时间:2023-12-01 19:32:08 26 4
gpt4 key购买 nike

我们有一个配置了 message_size_limit=10240000 (默认)的 postfix 服务器,我现在想阻止创建任何大于该值的邮件。因为否则我会收到“连接中断”错误,这很难以有意义的错误消息呈现给用户。

message_size_limit 的定义是:

The maximal size in bytes of a message, including envelope information.

我的问题是:如何计算/预测/估计创建的包含大量不同附件的邮件的大小(以字节为单位)? 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.writeTo 之前以及真正发送消息之前调用 Message.saveChanges

关于java - 估计新邮件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59380111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com