将 MimeMessage 对象消息转发为 EML 文件中附件的常规转发格式

Posted

技术标签:

【中文标题】将 MimeMessage 对象消息转发为 EML 文件中附件的常规转发格式【英文标题】:Forward MimeMessage object messages as an regular forward format INSTEAD of an attachment in EML file 【发布时间】:2019-09-09 07:37:58 【问题描述】:

基本上,我正在尝试构建转发电子邮件,然后将其转换为 EML 文件。但原始消息对象 msg 呈现为附件,而不是 EML 文件中的普通消息。我试过setContentgetDataHandler 方法将它添加到多部分电子邮件中,但没有运气。如果有人能帮助我解决这个问题,我真的很感激。

P.S msg 对象的实际内容是text/html 格式而不是text/plain

谢谢。

       MimeMessage forward = new MimeMessage(mailSession);

          // Fill in header
          forward.setSubject("Fwd: " + msg.getSubject());
          forward.setFrom(new InternetAddress(from));
          forward.addRecipient(Message.RecipientType.TO,new InternetAddress("toemail@ibm.com")); 
          forward.addRecipient(Message.RecipientType.CC,new InternetAddress("ccemail@gmail.com"));  


          // Create your new message part
            MimeBodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent(
                      "<html><body><h1>This is actual message embedded in HTML tags</h1></body></html>",
                     "text/html");

          // Create a multi-part to combine the parts
            MimeMultipart multipart = new MimeMultipart();
          multipart.addBodyPart(messageBodyPart);

          // Create and fill part for the forwarded content
          messageBodyPart = new MimeBodyPart();
          messageBodyPart.setDataHandler(msg.getDataHandler());
          //messageBodyPart.setContent(msg, "message/rfc822");

          // Add part to multi part
          multipart.addBodyPart(messageBodyPart);

          // Associate multi-part with message
          forward.setContent(multipart);



          // Send message
          Transport.send((Message)forward);
          System.out.println("message forwarded ....");

【问题讨论】:

【参考方案1】:

当您添加messageBodyPart 时,将Part::setDisposition 设置为INLINE。

 ...
 messageBodyPart = new MimeBodyPart();
 messageBodyPart.setDataHandler(msg.getDataHandler());
 messageBodyPart.setDisposition(Part.INLINE); //<-- Not an attachment.
 //messageBodyPart.setContent(msg, "message/rfc822");
 ...

【讨论】:

以上是关于将 MimeMessage 对象消息转发为 EML 文件中附件的常规转发格式的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Java 中的 MimeMessage 电子邮件中检索正文

使用现有的 MimeMessage 对象创建 MimeMessagePreparator

从 MIME 消息信息创建 EML 文件

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘

使用 MailKit (C#) 转发电子邮件

`eml` 文件和 RFC822 电子邮件消息有啥区别?