Java 发送包含任何附件、htmlbody、内联图像或所有附件的mime消息?

Java 发送包含任何附件、htmlbody、内联图像或所有附件的mime消息?,java,jakarta-mail,mime,mime-message,Java,Jakarta Mail,Mime,Mime Message,据我所知,我的电子邮件应用程序只支持带有附件的纯文本。如果附件列表为空,我用一种简单的方法处理它, 只需发送mime消息,如果AttchmentList不为null,我就为每个附件创建了一个body部分,为body创建了一个body部分。添加它们 在多部分中设置为mime消息 但是现在需要支持html部分和内联图像,图像将作为附件发送 我知道mime的基本知识,即如何为每种mime类型创建主体部分。但我真的不明白 当我不知道实体和附件列表将包含什么内容时,如何在运行timw时创建实体零件。例如,

据我所知,我的电子邮件应用程序只支持带有附件的纯文本。如果附件列表为空,我用一种简单的方法处理它, 只需发送mime消息,如果AttchmentList不为null,我就为每个附件创建了一个body部分,为body创建了一个body部分。添加它们 在多部分中设置为mime消息

但是现在需要支持html部分和内联图像,图像将作为附件发送 我知道mime的基本知识,即如何为每种mime类型创建主体部分。但我真的不明白 当我不知道实体和附件列表将包含什么内容时,如何在运行timw时创建实体零件。例如,正文只能包含纯文本 文本或html正文或带有附件的html正文,或带有带附件的内联图像的html正文,或带有附件的纯正文

坦率地说,我不明白 如何处理上述排列和组合的emailbody和附件列表 消息为多部分/混合,包含身体部位为多部分/备选,另一个身体部位为普通,bla bla。。。。。有标准吗 基于正文内容和附件列表处理这些场景的代码。请给我指出正确的方向

这是旧的方法签名,它只支持带有附件的纯文本

  public void sendMimeEmail(List toMailAddresses,
  String fromMailAddress,   String body, List<AttachmentData> attachments) {}

我不认为这里有什么魔力。您只需要足够的if声明来涵盖这些案例。

Bill。根据我的理解,实现这一目标的最佳方法是解析消息体,并查看是否存在html标记或带有cid的html标记。如果存在,将mime消息设置为multipart/alternative或multipart/related。这种逻辑。对吗?通常我希望你的程序知道消息体是html还是纯文本。如果你不得不猜测,那就由你自己来想出你喜欢的启发式方法。您是否正在收集用户输入的邮件正文文本?是的,我正在收集用户输入的邮件正文文本。我计划的是每次都将文本视为html,然后将邮件作为备选文本,以便不支持html文本的电子邮件客户端可以拾取文本/普通部分?是的,这将起作用,但您需要自己将用户输入的html文本转换为纯文本;JavaMail在这方面帮不了你。