Более эффективное решение, но требующее внешней библиотеки, следующее:
public static long getReliableSize(MimeMessage m) throws IOException, MessagingException {
try (CountingOutputStream out = new CountingOutputStream(new NullOutputStream())) {
m.writeTo(out);
return out.getByteCount();
}
}
И CountingOutputStream, и NullOutputStream доступны в Apache Common IO. Это решение не требует работы с временным байтовым буфером (запись, выделение, перераспределение и т. Д.)