【问题标题】:Multipart message sent as text/plain instead multipart/alternative in java多部分消息以文本/纯文本而不是 java 中的多部分/替代形式发送
【发布时间】:2018-07-17 23:26:54
【问题描述】:

我以多部分形式发送消息,下面是我的代码:

Message message = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");

try {

MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");

multiPart.addBodyPart(htmlPart);
multiPart.addBodyPart(textPart);
message.setContent(multiPart);
transport.send(message);

} catch (AddressException e) {
    e.printStackTrace();
    System.out.println("Error: "+e.getMessage());

}

现在当我在 Outlook 中收到它时,它显示为 text/plain

有什么想法吗?

【问题讨论】:

  • 它在 Thunderbird 等其他邮件中如何显示?如果在 transport.send 调用之前添加 message.writeTo(System.out),消息会是什么样子?
  • 如果我 System.out.println(message.getContentType()); 它显示 text/plain
  • 您需要先致电message.saveChanges() 才能获得有效结果。
  • 我昨天找到了它,今天看到你的评论也差不多。谢谢@BillShannon 成功了。

标签: java jakarta-mail mime multipart


【解决方案1】:

我终于找到了解决这个问题的方法。显然,有时您需要保存更改以使您的消息作为多部分/替代发送。我指的是:

https://docs.oracle.com/javaee/6/api/javax/mail/Message.html#saveChanges()

所以现在我的代码是:

Message message = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");

try {

MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");

multiPart.addBodyPart(htmlPart);
multiPart.addBodyPart(textPart);
message.setContent(multiPart);
message.saveChanges();
transport.send(message);

} catch (AddressException e) {
    e.printStackTrace();
    System.out.println("Error: "+e.getMessage());

}

【讨论】:

  • 除非您使用的是 非常 旧版本的 JavaMail,否则不需要调用 saveChanges。你用的是什么版本?另外,请注意您的 transport instance is not being used.
猜你喜欢
  • 2013-06-13
  • 2013-02-19
  • 1970-01-01
  • 2011-09-24
  • 2013-02-24
  • 2020-04-23
  • 2011-05-20
  • 2011-05-06
  • 2013-05-20
相关资源
最近更新 更多