多部分消息以文本/纯文本而不是 java 中的多部分/替代形式发送
Posted
技术标签:
【中文标题】多部分消息以文本/纯文本而不是 java 中的多部分/替代形式发送【英文标题】:Multipart message sent as text/plain instead multipart/alternative in 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 成功了。
【参考方案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.以上是关于多部分消息以文本/纯文本而不是 java 中的多部分/替代形式发送的主要内容,如果未能解决你的问题,请参考以下文章
如何编写多部分 MIME 混合消息以在 Outlook 中正确显示
带有文本和日历的多部分电子邮件:Outlook 无法识别 ics
使用 mailkit 发送的多部分电子邮件的文本/纯文本版本未正确接收