【问题标题】:passing java mail message object from between applications从应用程序之间传递 java 邮件消息对象
【发布时间】:2011-03-01 07:58:52
【问题描述】:

我正在使用 java mail api 1.4.1 来获取新电子邮件。有两个类用于获取电子邮件然后对其进行解析。 “GetMail”类与邮件服务器(Gmail、雅虎等)通信并获取消息对象。然后将消息对象传递给另一个类“MailFormatter”类,然后解析消息对象,获取电子邮件标头(From、To、Subject 等),然后解析 Multipart 内容以获得主体和附件。因为“邮件获取”和“邮件格式化”过程都非常耗费资源,这些类将作为单独的 Web 应用程序实现。此应用程序将监视新电子邮件中的大量电子邮件 ID。如果这些(“GetMail”和“MailFormatter” ") 被实现为单独的 Web 应用程序,如何将消息对象从“GetMail”应用程序传递到“MailFormatter”应用程序?有没有一种方法可以将获得的消息对象保存在某个位置(“GetMail”和“MailFormatter”应用程序都通用的位置),以便“GetMail”可以将消息对象保存在该位置,并且然后“MailFormatter”应用程序可以从该位置读取“消息”对象并执行解析过程。消息对象不能被序列化。如果它们不能被序列化,我该如何保持 java 邮件消息对象的状态?请帮我解决这个问题。

【问题讨论】:

    标签: java email jakarta-mail


    【解决方案1】:

    MimeMessage 可以使用 writeTo(OutputStream) 进行序列化,并使用构造函数 MimeMessage(Session,InputStream) 进行反序列化。

    所以消息可以从一个 webapp 发送到另一个。

    【讨论】:

    • 感谢您的回答。所以我可以使用 FileOutputStream 并将对象作为文件持久化,然后通过 MimeMessage 构造函数读取它。 FileOutputStream 是保存消息的最佳方法吗?如果持久消息不是 MimeMessage 怎么办?如何通过输入流读取非 mime 消息?此外,MimeMessage 构造函数需要一个会话对象来读取消息输入流。如何在其他 Web 应用程序中创建此会话对象?
    • @jezhilvalan 我不知道任何现实世界的场景中,您会收到无法转换为 MimeMessage 的消息,有人知道吗?
    • @Persimmonium:Java Mail JAR 只有 MimeMessage 的 impls,但 Message 接口可能存在以供将来扩展。
    【解决方案2】:

    我意识到我没有回答您的问题(!),但我想知道您是否解决了正确的问题。解析是否如此耗时以至于需要拆分为不同的进程。您是否尝试过通过一个线程收集消息,并通过另一个线程异步解析它们?我怀疑这会比执行某种形式的 IPC 更简单。

    如果您确实想要序列化不是Serializable 的对象,请查看XStream,它将序列化大多数内容到XML 或从XML 序列化。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多