2012-01-31 50 views
2

我有一個包含加密部件的MimeMessage實例。在不更改底層部分的情況下更改多部分/ XXX內容類型

原始內容類型是「多部分/加密的;協議=」應用/ PGP加密「;邊界=」 EncryptedBoundary12312345654654"

各部件的解密後,我想多部分報頭,以改變如:

"multipart/mixed; boundary="EncryptedBoundary12312345654654" 

的邊界數目顯然是動態的,那麼我就可以不只是讓

​​

你有關於該CA的最佳實踐的想法SE?

回答

1

我的回答發表我的解決方案的代碼:

// source is the encrypted MimeMessage 
// MimeMessageWrapper is a wrapper which can copy a messgae but keep the message ID unchanged 
boolean keepMessageId = true; 
MimeMessageWrapper newMime = new MimeMessageWrapper(source, keepMessageId); 

MimeMultipart mmp = new MimeMultipart("mixed"); 

List<MimePart> parts = MimeMultipartUtils.findPartsByMimeType(mime, "*"); 

for (MimePart part : parts) { 

    // Do some part processing 
    // Decrypt Adn verify individual parts 
    // End of processing 

    ContentType type = new ContentType(part.getContentType()); 
    String encoding = part.getEncoding(); 
    String name = type.getParameter("name"); 

    part.setContent(new String(decPart.toByteArray()), type.toString()); 

    // Add the part to the brand new MimeMultipart 
    mmp.addBodyPart((BodyPart) part); 

} 

// Set the original copy Message with the new modified content (decrypted parts) 
mime.setContent(mmp); 
mime.saveChanges(); 

事實上,它似乎沒有另一種方式來改變原始信息,但創建一個副本,就足以讓我。重要的一點是創建一個新的MimeMultipart對象,該對象將包含解密的部分,然後將其作爲內容提供給MimeMessage(包裝器)。這將會「自動」生成新的內容類型值。

有關信息,我們確實使用了一個MimeMessageWrapper,它只是一個包裝類,可以使消息ID保持不變(或不)到副本。一個可能的實施是在Apache James項目上。

另外重要的一點,終於在該解決方案中,底層部分被改變,但邊界被改編以及(這是不是說EncryptedXXXX了),這是更清潔了我們的情況。

2

我不明白當你說你想「多部分頭部改變」時你的意思。 您是否試圖解密消息「就地」?這可能不會很好。

您可以使用原始消息的解密內容創建新消息。 如果是對你很重要事情,如「邊界」值保持不變, 你可能需要繼承MimeMultipart的,使用的ContentType類 構建新的內容類型值。

+0

是的,我解密一個加密的消息,我想改變原來的contentType。我發現我可以用一個新的MultiPart對象來設置一個MimeMessage副本,該對象包含源的解密MimeParts。我不介意邊界被「重新生成」(事實上,即使沒有「加密」前綴也會更好,因爲附件在新對象中被解密。 – 2012-02-01 09:50:51

+2

使用JavaMail類進行編輯(與「create 「)過去有一條消息已經證明存在問題,多年來我爲JavaMail做了許多修復,以使其更好地發揮作用,如果它適用於您的用例,那麼很好,但仍可能存在處理不好的情況無論如何,在這種情況下,您應該創建一個新的MimeMultipart對象並使用解密的內容填充它,而不是僅替換原始MimeMultipart對象中的正文部分。 – 2012-02-01 19:53:04

相關問題