我正在使用javamail API连接到IMAP服务器,并尝试向现有邮件添加附件。
我找到了以下两个线程,但它并没有完全帮助:
向现有MimeMessage添加附件
将附件添加到现有eml文件
我正试图完成同样的事情,但不知何故,我错过了一些东西,因为最后附件被添加到了邮件中,但电子邮件内容的格式变为纯文本,我看到所有内容都混合在一起,变成了纯文本,怎么了?
邮件是直接从IMAP连接读取的,而不是从.eml文件读取的,它可能已经有其他附件和/或text/html内容。
代码:
MimeMessage newmsg = new MimeMessage((MimeMessage) message);
newmsg.setSubject(new_subj);
newmsg.setFlag(Flags.Flag.SEEN, false);
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.attachFile("test.txt");
Multipart multipart = (Multipart)message.getContent();
multipart.addBodyPart(messageBodyPart);
newmsg.setContent(multipart);
newmsg.saveChanges();
Folder folder_dest = folder.getFolder("test");
folder_dest.appendMessages(new Message[]{newmsg});
您可能想要更改
Multipart multipart = (Multipart)message.getContent();
至
Multipart multipart = (Multipart)newmsg.getContent();
但我尝试了两种方法,都对我有效。当然,这取决于原始消息是多部分/混合消息。
以下是我对msgshow.java示例程序所做的测试更改:
diff -r 381478f33ec5 demo/src/main/java/msgshow.java
--- a/demo/src/main/java/msgshow.java Wed Jan 27 17:03:33 2016 -0800
+++ b/demo/src/main/java/msgshow.java Mon Apr 11 11:39:36 2016 -0700
@@ -221,7 +221,16 @@
try {
m = folder.getMessage(msgnum);
- dumpPart(m);
+ MimeMessage n = new MimeMessage((MimeMessage)m);
+ n.setSubject("new subject");
+ n.setFlag(Flags.Flag.SEEN, false);
+ MimeBodyPart mbp = new MimeBodyPart();
+ mbp.attachFile("test.txt");
+ Multipart mp = (Multipart)n.getContent();
+ mp.addBodyPart(mbp);
+ n.setContent(mp);
+ n.saveChanges();
+ dumpPart(n);
} catch (IndexOutOfBoundsException iex) {
System.out.println("Message number out of range");
}
你能用这些变化重现问题吗?