2012-06-17 80 views
3

我試圖用JavaMail API解析MIME郵件,我做了一些研究,但是我發現的步驟對我不起作用,其中之一就是這裏回答的問題: Java Email message Parser?使用JavaMail解析MIME郵件

我正在做它通過一個InputStream作爲ByteArrayInputStream來自我試圖解析的內容。 當我這樣做時,我的message.getContent導致一個空的String。

我使用Scala,順便說一句。

回答

1

它應該工作,所以我們需要更多的細節來了解你在做什麼來弄清楚發生了什麼問題。

首先,讓我們確保問題不在您的代碼中,並且郵件格式正確。使用JavaMail附帶的msgshow.java演示程序來顯示消息。使用-m選項並從包含MIME消息的文件重定向stdin。它顯示什麼?

如果能正常工作,請向我們展示您用於閱讀郵件的代碼。

+0

謝謝你的答案呃,我已經解決了我的問題,正如你所說的那樣是在MIME消息格式中,我正在逃避一些\ n我不應該。之後,一切按預期工作。 –

2

我最近有這個問題,所以你的研究不可能那麼好。當我最近說的時候,我的意思是最近幾天! :P

,但是這是我做閱讀電子郵件(或者至少在某種程度上閱讀電子郵件,它返回HTML文本的一大塊,這是不是真的永遠漂亮的一個JEditorPane

private void tableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseReleased 
    final java.awt.event.MouseEvent e = evt; 
    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      if(table.getRowCount() == 0 || message == null || message.length == 0) { 
     // Do nothing 
    } else { 
     try { 
      int row = table.rowAtPoint(e.getPoint());     
      String subject = message[row].getSubject(); 
      String from = InternetAddress.toString(message[row].getFrom()); 
      StringBuilder body = new StringBuilder(); 
      Multipart mp = (Multipart) message[row].getContent(); 
      for(int i = 0; i < mp.getCount(); i++) { 
       BodyPart bp = mp.getBodyPart(i); 
       String disp = bp.getDisposition(); 
       if(disp != null && (disp.equals(BodyPart.ATTACHMENT))) { 
        // Do something 
       } else { 
        body.append(bp.getContent()); 
       } 
      } 
      EmailContent ec = new EmailContent(new JFrame(),true,from,subject,"<html>" + body.toString()); 
     } catch (IOException ex) { 
      Logger.getLogger(MailPanel.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (MessagingException ex) { 
      Logger.getLogger(MailPanel.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
     } 
    }); 
    t.start(); 
} 

我不得不用表格填充消息,然後當你點擊表格中的消息時,它會顯示一個新窗口,其中包含消息。消息數組只是一個填充了消息對象的數組,所以你顯然需要一個消息要做到這一點,但你所在的部分是這樣的:

StringBuilder body = new StringBuilder(); 
Multipart mp = (Multipart) message[row].getContent(); 
    for(int i = 0; i < mp.getCount(); i++) { 
     BodyPart bp = mp.getBodyPart(i); 
     String disp = bp.getDisposition(); 
     if(disp != null && (disp.equals(BodyPart.ATTACHMENT))) { 
      // Do something 
     } else { 
      body.append(bp.getContent()); 
     } 
    } 
+0

我曾嘗試過,但在嘗試投射Multipart時遇到了異常,但是我發現該錯誤,問題在於我逃離了「\ n」s,而我不應該這樣做:P –