2009-01-07 61 views
2

我將創建一個使用JavaMail附件的EML文件附件的EML文件。創建與使用JavaMail

我創建了一個簡單的EML文件成功,但增加一個附件不能正常工作。我要添加一個PDF文件。我的EML文件將被成功創建。如果我用Outlook打開生成的EML文件,我會發現不是我的PDF文件作爲附件,但是我會找到EML文件本身作爲附件。有沒有人有想法?

我試過兩個變體(結果相同),我用FileDataSource類和簡單的方式用MimeBodyPart#attachFile(File)

我要發佈一個例子:

File pdfFile = new File("somePdfFile"); 

Properties p = System.getProperties(); 
Session session = Session.getInstance(p); 
MimeMessage message = new MimeMessage(session); 
// MimeBodyPart txt = new MimeBodyPart(); 
// txt.setText(""); 
MimeBodyPart mbp = new MimeBodyPart(); 
mbp.attachFile(attachment); 
// FileDataSource fds = new FileDataSource(attachment); 
// fds.setFileTypeMap(new FileTypeMap() { 
//  
// @Override 
// public String getContentType(String arg0) { 
//  return "application/pdf"; 
// } 
//  
// @Override 
// public String getContentType(File file) { 
//  return "application/pdf"; 
// } 
//  
// }); 
// mbp.setDataHandler(new DataHandler(fds)); 
// mbp.setFileName("\"" + attachment.getName() + "\""); 
// mbp.setDisposition(MimePart.ATTACHMENT); 
// mbp.setHeader("Content-ID", "Attachment"); 
Multipart mp = new MimeMultipart(); 
// mp.addBodyPart(txt); 
mp.addBodyPart(mbp); 
message.setContent(mp); 
File emlFile = new File("message.eml"); 
emlFile.createNewFile(); 
message.writeTo(new FileOutputStream(emlFile)); 

// do something with the EML file 
// Desktop.getDesktop().open(emlFile); 

Create a .eml (email) file in Java


謝謝您的答覆。我上傳了一個PDF文件(用於測試,它是用Crystal Reports生成的簡單的HelloWorld)以及生成的應包含PDF文件的EML文件。

我只注意到,如果我打開鏈接EML文件與蘋果的郵件或使用Outlook Express它工作(但沒有修改的可能性)。也許這是Microsoft Outlook的問題?

的鏈接都被刪除

+0

你可以發佈生成的電子郵件文件嗎?因爲它可能是TNEF編碼的,它將是一個二進制文件,但我很高興你的代碼生成的輸出。當你調用mbp.attachFile()時,確保該函數正確設置了MIME類型等。如果沒有,你將不得不爲MIME部分設置它,並且你可能希望它是「附件」,可能不會暗示,即使您調用attachFile(),因爲該函數也可以用於附加HTML內聯等)。 (我認爲這是你想要設置爲「附件」的內容處置,而內容類型是文件 – LarryF 2009-01-07 20:43:36

回答

1

你應該嘗試將我提到的消息的最頂端標題行,看到Outlook如何處理它呢。添加To:From:Subject:,甚至一個Date:在他們真實的數據,和Outlook更可能把它當作一個消息,而這只是一個文件。

1

Zubi,它看起來像的問題是上附件的內容類型設置爲「application /八位字節流」。因此,它看起來像郵件閱讀器將PDF文件作爲不存在的消息的「文本」正文的替代顯示(它只是空白)。你會不得不原諒我,自從我處理Mime以來已經有一年多的時間了,但我認爲你會希望A)在信息中加入一些正文文字,B)確保附件上的類型設置爲application/pdf。希望這將防止郵件閱讀嘗試顯示PDF作爲郵件的主體。

除此之外,它看起來正常...現在,展望MIGHT母狗,因爲沒有RFC在主體822頭。您可能需要添加至少一個From:To:Subject:

消息通過我的MIME解析代碼...