2016-04-07 16 views
1

Ich bin eine Verbindung zu einem IMAP-Server mit Javamail-API und ich versuche, eine Anlage zu einer vorhandenen Nachricht hinzuzufügen.Fügen Sie einen Anhang zu einer vorhandenen Nachricht mit Javamail API

fand ich die folgenden zwei Threads, aber es funktioniert nicht in vollem Umfang Hilfe:

Adding attachment to existing MimeMessage
Add attachments to existing eml file

Ich versuche, die gleiche Sache, zu erreichen, aber irgendwie etwas fehle ich denn am Ende Der Anhang wird zu der Nachricht hinzugefügt, aber das Format des Inhalts der E-Mail ändert sich in reinen Text und ich sehe den gesamten Inhalt zusammen als einfachen Text, was ist falsch?

Die Nachricht wird direkt von einer IMAP-Verbindung und nicht von einer .eml-Datei gelesen und kann bereits andere Anhänge und/oder Text-/HTML-Inhalte enthalten.

Code:

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

Welche Version von JavaMail verwenden Sie? –

+0

Ich benutze Javamail 1.5.4 –

Antwort

0

Sie wahrscheinlich

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

zu

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

Aber ich versuchte es in beide Richtungen ändern wollen, und es funktionierte für mich. Dies hängt natürlich davon ab, dass die ursprüngliche Nachricht eine mehrteilige/gemischte Nachricht ist.

Hier die Änderungen, die ich an den msgshow.java sample program machte es zu testen:

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"); 
        } 

Können Sie das Problem mit diesen Änderungen reproduzieren?

+0

Vielen Dank ... es zu ändern 'Multipart multipart = (Multipart) newmsg.getContent(); ' hat den Trick gemacht! In der Tat habe ich falsch versucht, den Inhalt der ersten Nachricht und nicht die Kopie zu bekommen. –