0

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

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

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

你会如何在 Java 中处理它?

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

现在我在想,也许我正在以错误的方式解决这个问题。所以我非常感谢任何关于如何通过简单的问题解决这个问题的想法。

4

1 回答 1

1

您将遇到仅发送字节偏移量和完整电子邮件的问题,因为电子邮件仍然可以进行 base64 编码或打印可引用编码。

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

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

于 2020-10-01T14:36:22.683 回答