2012-10-30 114 views
2

我有一個關於MIME消息的內容類型的混淆。假設我有一個啞劇消息。它是一個多部分消息和主體部分都是這樣設置MimeMessage的內容類型?

  1. MIME主體部分包含純文本,HTML文本(如在 一些字母在身體粗體)包含附件
  2. 二MIME主體部分,
  3. 含有一個內嵌圖像(其正被從體稱爲與CID)
  4. 第三MIME主體部分

當我創建身體部分,我應該明確設置爲頂MIME消息,然後每個身體部位的內容類型?

如果是的話,他們應該在上面的例子中是什麼?

multipart/alternative建議用於html,multipart/mixed建議用於附件,multipart/related建議用於內聯。我正在使用他們所有的,所以應該是什麼內容 - 鍵入完整的消息和不同的身體部位?

僅供參考,我試圖複製以上場景,我沒有爲整體MimeMessage或正文部分設置內容類型。

但我仍得到預期的東西,如純文本,粗體字母在正文,附件,嵌入式圖像詹姆斯在正確的地方

爲什麼詹姆斯解釋MIME消息和身體部位不設置內容類型,以及它如何以正確的方式展示它們?

代碼僅供參考

MimeMessage msg = new MimeMessage(mailSession); 
    MimeMultipart mpart = new MimeMultipart(); 
    MimeBodyPart bp = new MimeBodyPart(); 
    bp.setText("plain text and html text like<b>Test</>", CHARSET_UTF_8, MESSAGE_HTML_CONTENT_TYPE); 
    // add message body 
    mpart.addBodyPart(bp); 

// adding attachment 
    MimeBodyPart bodyPart = new MimeBodyPart(); 
    bodyPart.setFileName("WordFile1"); 
    file = new File("word file"); 
    DataSource source = new FileDataSource(file); 
    bodyPart.setDataHandler(new DataHandler(source)); 
    mpart.addBodyPart(bodyPart); 


// adding image inline 
    MimeBodyPart bodyPart2 = new MimeBodyPart(); 
    bodyPart2.setFileName("inline image"); 
    file2 = new File("image1"); 
    DataSource source2 = new FileDataSource(file); 
    bodyPart2.setDataHandler(new DataHandler(source)); 
    bodyPart2.setDisposition(MimeBodyPart.INLINE); 
    bodyPart2.setHeader("Content-ID", "Unique-CntentId"); 
    bodyPart2.setHeader("Content-Type", "image/jpeg"); 
    mpart.addBodyPart(bodyPart2); 

    // At last setting multipart In MimeMessage 
    msg.setContent(mpart); 

與上面的代碼,我得到正確的HTML文本,純文本,內嵌圖片和附件,在正確的地方雷鳥與詹姆斯集成。

所以我不明白何時何地將multipart/mixedmultipart/alternative,multipart/related設置爲Content-Type或郵件服務器是否在內部設置它?

回答

2

如果我理解你想要做什麼,你想用這個結構中的消息:

multipart/mixed 
    multipart/alternative 
     text/plain - a plain text version of the main message body 
     multipart/related 
     text/html - the html version of the main message body 
     image/jpeg - an image referenced by the main body 
    application/octet-stream (or whatever) - the attachment 

這意味着三個嵌套多件。您需要指定除默認「混合」之外的每個多部分片段的子類型。

多部分/混合和多部分/替代件相對簡單。多部分/相關部分更復雜,您可能想要閱讀RFC 2387和/或找到其他一些教程來幫助您。

您可以通過擺脫multipart/related並簡單地將HTML文本引用映射到互聯網上某處的圖像來簡化結構。

您還應該測試一下具有此結構的郵件是否會被您關心的所有郵件閱讀器正確顯示。有些郵件閱讀器會比其他複雜結構的郵件閱讀器做得更好。

+0

謝謝比爾。這正是我通過調試發現,當我通過詹姆斯服務器使用thunderbird發送郵件 –

+0

比爾你可以提供你的想法http://stackoverflow.com/questions/13157171/embedding-inline-image-in-email-and-如果你有一些想法,請參閱它的通過。在此先感謝 –

+0

我在那裏添加了一條評論。 –