使用Javamail API向现有邮件添加附件



我正在使用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");
                    }

你能用这些变化重现问题吗?

相关内容

  • 没有找到相关文章

最新更新