2016-04-07 11 views
1

javamail APIを使用してIMAPサーバーに接続しています。既存のメッセージに添付ファイルを追加しようとしています。Javamail APIを使用して既存のメッセージに添付ファイルを追加

私は2つのスレッドの下に見つけましたが、それは完全には解決しない。なぜなら、最後に、私は同じことを達成しようとしていますが、どういうわけか、私は何かが欠けています

Adding attachment to existing MimeMessage
Add attachments to existing eml file

添付ファイルはメッセージに追加されますが、電子メールのコンテンツのフォーマットはプレーンテキストに変更され、すべてのコンテンツがプレーンテキストとして混在するのが分かりますが、何が問題なのですか?

メッセージは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}); 
+0

どのJavaMailのバージョンを使用していますか? –

+0

私はjavamailを使用しています。1.5.4 –

答えて

0

おそらく

Multipart multipart = (Multipart)newmsg.getContent(); 

Multipart multipart = (Multipart)message.getContent(); 

を変更したいしかし、私はそれを両方の方法を試してみましたが、それは私のために働きました。もちろん、これは元のメッセージが複数パート/混合メッセージであるかどうかによって異なります。

ここで私はそれをテストするために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"); 
        } 

は、あなたがそれらの変更に伴う問題を再現することはできますか?

+0

ありがとうございました...それを に変更しました。 'Multipart multipart =(Multipart)newmsg.getContent(); ' トリックをしました! 実際、最初のメッセージの内容を取得しようとして間違っていました。コピーではありません。 –

関連する問題