2014-02-06 57 views
0

我一直在實現一個功能來讀取電子郵件文件。如果文件有附件,則返回附件名稱。 現在我正在使用Javamail庫來解析電子郵件文件。這是我的代碼。Javamail解析電子郵件正文與7BIT內容傳輸編碼

public static void parse(File file) throws Exception { 
    InputStream source = new FileInputStream(file); 
    MimeMessage message = new MimeMessage(null, source); 
    Multipart multipart = (Multipart) message.getContent(); 
    for (int i = 0; i < multipart.getCount(); i++) { 
     BodyPart bodyPart = multipart.getBodyPart(i); 
     String disposition = bodyPart.getDisposition(); 
     if (disposition != null 
       && disposition.equalsIgnoreCase(Part.ATTACHMENT)) { 
      System.out.println("FileName:" 
        + MimeUtility.decodeText(bodyPart.getFileName())); 
     } 
    } 
} 

它工作正常,但是當郵件文件中有7位內容傳輸編碼,bodyPart.getFileName()使NullPointerException異常。 當電子郵件是7位Content-Transfer-Encoding時,有沒有辦法獲得附件名稱? 對不起,我英文很差。

編輯:這裏是關於我的測試文件的一些信息。 (X-Mailer:Emacs 21.3/Mule 5.0(SAKAKI)上的Mew 2.2版); (Mime-Version:1.0):(Content-Type:Multipart/Mixed); (Content-Transfer-Encoding:7bit)

回答

0

如果我的回答不起作用,請顯示堆棧跟蹤。

使用Session,因爲這可能是唯一的東西是空的。

Properties properties = new Properties(); 
Session session = Session.getDefaultInstance(properties); 
MimeMessage message = new MimeMessage(session, source); 
+0

謝謝你的回答,但它不起作用。堆棧跟蹤僅在body body.getFileName()處打印java.lang.NullPointerException。 – AnhTT

+0

bodyPart不能爲null,所以在getFileName(或decodeText)中必須拋出NullPointerException。對不起,我忍不住進一步。 –

0

並非所有的附件都有一個文件名。你需要處理這種情況。

和你don't need to decode the filename

+0

非常感謝你。我將「mail.mime.decodeparameters」設置爲「true」,問題就解決了。 – AnhTT

0

您可以處理以這種方式 「附件沒有名字」 的情況:()bodyPart.getFileName(== NULL)

字符串文件名=? 「your_filename」 :bodyPart.getFileName();

相關問題