查找电子邮件附件的字节偏移

时间:2020-10-01 12:49:34

标签: java jakarta-mail email-attachments mime4j

我有要求将电子邮件发送到需要阅读附件的旧系统。

对于多部分电子邮件中的每个部分,我需要提供附件在电子邮件中开始的位置的字节偏移,因此旧系统无需知道如何解析电子邮件。

性能和内存使用是一个问题,因此该解决方案无法将整个电子邮件加载到内存中。在我看来,这遗漏了javax.mail。

您将如何在Java中使用它?

我的第一个想法是使用mime4j,但是该库不保留字节偏移量甚至行号。 我研究了对mime4j进行PR,以增加对行号和字节偏移的跟踪。但这并不是一件容易的事,因为它是一个非常成熟的项目,并且在内部使用了大量缓冲。

现在我在想,也许我会以错误的方式来做这件事。因此,我非常感激任何有关如何在一个简单的问题中解决此问题的想法。

1 个答案:

答案 0 :(得分:1)

由于电子邮件仍然可以使用base64编码或打印为引号引用,因此您只会遇到发送字节偏移量和完整电子邮件的问题。

您将要使用MimeStreamParser并提供自己的ContentHandler并覆盖body方法。然后,您可以直接将BodyDescriptor和InputStream发送到旧系统。 InputStream是经过“解码”的电子邮件(IE处理任何Content-Transfer-Encoding)。 BodyDescriptor可用于从您可能关心的部分的标题中提取内容(MimeType和Charset是最有用的)。

这不会缓冲整个电子邮件,并且允许您仅流出正文部分。我不确定您是如何(通过网络或它是一个进程内子组件)与旧系统进行通信的,但希望能正常工作!

相关问题