2016-11-05 131 views
0

我想添加文本到電子郵件的開頭並將其發回。回覆多部分電子郵件

如果這封信是MIME「text/plain」,它可以正常工作。 如果MIME「multipart/*」工作不正常。發件人收到帶有附件的回覆,而不是原始正文。

如何將文本添加到「multipart/*」電子郵件併發送給發件人?

void replyMessage(String from, int MessageNumber, String MessageText) throws Exception { 

    if (messages[MessageNumber].isMimeType("text/plain")) { 

     // it work! 
     Message msgReply = messages[MessageNumber].reply(false); 
     String originalText = messages[MessageNumber].getContent().toString().replaceAll("(?m)^", "> "); 

     msgReply.setFrom(new InternetAddress(from)); 
     msgReply.setText(MessageText + "\n\n---------------\n\n" + originalText); 

     Transport.send(msgReply, user, pass); 


    } else if (messages[MessageNumber].isMimeType("multipart/*")) { 

     // not work! 
     MimeMessage msgReply = (MimeMessage) messages[MessageNumber].reply(false); 
     msgReply.setFrom(new InternetAddress(from)); 

     // Create your new message part 
     BodyPart messageBodyPart1 = new MimeBodyPart(); 
     messageBodyPart1.setText("Oiginal message:\n\n"); 

     // Create and fill part for the forwarded content 
     BodyPart messageBodyPart2 = new MimeBodyPart(); 
     messageBodyPart2.setDataHandler(messages[MessageNumber].getDataHandler()); 

     // Create a multi-part to combine the parts 
     Multipart multipart = new MimeMultipart(); 

     // Add parts to multi part 
     multipart.addBodyPart(messageBodyPart1); 
     multipart.addBodyPart(messageBodyPart2); 

     // add the Multipart to the message 
     msgReply.setContent(multipart); 

     Transport.send(msgReply, user, pass); 
    } 
} 

回答

0

您需要將原始文本和回覆文本到一個字符串和一個身體部位相結合,就像你在text/plain的情況下做到了。但是,您需要決定如何處理原始郵件中的其他部分。如果他們是附件,你想丟棄它們嗎?如果原始郵件是multipart/alternative,您是否想更新回覆中的text/html和text/plain部分?如果原件是多部分/相關的,是否要保留圖片並更新回覆中的文本/ html?還有很多情況需要考慮,甚至忽略簽名或加密的消息。

+0

謝謝你的迴應。 這是我第一次使用郵件的經歷。在那之前,我認爲回覆電子郵件是一件簡單的事情)。 因此,我希望得到原始的信件,但要在第一行寫上我的文字。附件忽略。 在JavaMail附帶的例子中,我沒有發現任何類似的東西。 您能展示一個這樣的代碼的例子嗎? –