使用 Javamail 向现有邮件添加附件 API
Add attachment to existing message using Javamail API
我正在使用 javamail API 连接到 IMAP 服务器,我尝试向现有邮件添加附件。
我找到了以下两个线程,但它并没有完全帮助:
Adding attachment to existing MimeMessage
Add attachments to existing eml file
我正在尝试完成同样的事情,但不知何故我遗漏了一些东西,因为最后附件被添加到邮件中,但电子邮件内容的格式变为纯文本,我看到了所有内容混合在一起作为纯文本,有什么问题吗?
邮件是直接从 IMAP 连接读取的,而不是从 .eml 文件读取的,它可能已经有其他附件 and/or 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();
但我尝试了两种方法,它对我有用。当然,这取决于原始消息是 multipart/mixed 消息。
以下是我对 msgshow.java sample program 所做的更改以对其进行测试:
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");
}
你能通过这些更改重现问题吗?
我正在使用 javamail API 连接到 IMAP 服务器,我尝试向现有邮件添加附件。
我找到了以下两个线程,但它并没有完全帮助:
Adding attachment to existing MimeMessage
Add attachments to existing eml file
我正在尝试完成同样的事情,但不知何故我遗漏了一些东西,因为最后附件被添加到邮件中,但电子邮件内容的格式变为纯文本,我看到了所有内容混合在一起作为纯文本,有什么问题吗?
邮件是直接从 IMAP 连接读取的,而不是从 .eml 文件读取的,它可能已经有其他附件 and/or 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();
但我尝试了两种方法,它对我有用。当然,这取决于原始消息是 multipart/mixed 消息。
以下是我对 msgshow.java sample program 所做的更改以对其进行测试:
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");
}
你能通过这些更改重现问题吗?