2017-07-27 60 views
0

我正在閱讀gmail.com的電子郵件。我看過一些郵件的成功,但一段時間後,我得到這個,郵件JAVA中的讀取錯誤

java.lang.ClassCastException: 
javax.mail.internet.MimeMultipart cannot be cast to java.lang.String 
at emailIngestion.EmailIngestion.check(EmailIngestion.java:66) 
at emailIngestion.EmailIngestion.main(EmailIngestion.java:106). 

其實我的要求是存儲內容到一個變量,然後將其存放在數組列表中,然後再寫入到一個文件...我已經使用這個代碼實現了它,所以如果有更好的想法,請與我分享。

public class EmailIngestion { 
static ArrayList<EmailModel> contentList=new ArrayList<EmailModel>(); 
static ArrayList<EmailModel> metaDataList= new ArrayList<EmailModel>(); 
public static void check(String host, String storeType, String user, 
     String password) throws IOException 
{ 
    FileWriter fw= new FileWriter("C:\\Users\\Admin\\Desktop\\murtaza_metadata.csv",true); 
    FileWriter fw1= new FileWriter("C:\\Users\\Admin\\Desktop\\murtaza_content.txt",true); 
    try { 
     //create properties field 
     Properties properties = new Properties(); 
     properties.put("mail.pop3.host", host); 
     properties.put("mail.pop3.port", "995"); 
     properties.put("mail.pop3.starttls.enable", "true"); 
     Session emailSession = Session.getDefaultInstance(properties); 
     Store store = emailSession.getStore("pop3s"); 
     store.connect(host, user, password); 
     Folder emailFolder = store.getFolder("INBOX"); 
     emailFolder.open(Folder.READ_ONLY); 
     Message[] messages = emailFolder.getMessages(); 
     int emailNumber; 
     String mailContent = null,from = null,to = null,mailContentType = null,subject = null; 
     Date recievedDate= new Date(); 
     System.out.println("messages.length---" + messages.length); 
     for (int i = 0, n = messages.length; i < n; i++) { 
      Message message = messages[i]; 
      System.out.println("Subject is"+message.getSubject()); 
      subject = message.getSubject(); 
      from = message.getFrom()[0].toString(); 
      mailContentType=message.getContentType(); 
      recievedDate=message.getSentDate(); 
      to=InternetAddress.toString(message.getRecipients(Message.RecipientType.TO)); 
      emailNumber=message.getMessageNumber(); 
      metaDataList.add(new EmailModel(from, to, subject, mailContentType, recievedDate,emailNumber)); 
      fw.write(emailNumber+"\001"+from+"\001"+subject+"\001"+recievedDate+mailContentType+"\001"+" \n"); 
      fw.flush(); 
      if(message.isMimeType("multipart/*")){ 
       Multipart multipart = (Multipart) message.getContent(); 
       for (int x = 0; x < multipart.getCount(); x++) { 
        BodyPart bodyPart = multipart.getBodyPart(x); 
         mailContent=(String) bodyPart.getContent(); 
         System.out.println(mailContent); 
        } 
       } 
      else{ 
       mailContent=(String) message.getContent(); 
       System.out.println(message.getContent()); 
      } 
      contentList.add(new EmailModel(mailContent, emailNumber)); 
      fw1.write(emailNumber+","+mailContent+"\n"); 
     } 
     emailFolder.close(false); 
     store.close(); 

    } catch (NoSuchProviderException e) { 
     e.printStackTrace(); 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) throws IOException { 

    String host = "pop.gmail.com";// change accordingly 
    String mailStoreType = "pop3"; 
    String username = "[email protected]";// change accordingly 
    String password = "******";// change accordingly 
    check(host, mailStoreType, username, password); 

} 

}

在此先感謝

+0

日誌不確定。您的服務似乎在「傳遞」和「失敗」之間波動的事實可能表明存在資源瓶頸。有趣的是,還可以通過DEBUG級別日誌來查看目錄日誌。 –

+0

@FrankLegler感謝您的好評。我在哪裏可以找到調試級別日誌? –

+0

您可以更改Vora Manager UI中不同Vora服務的日誌級別。 –

回答

0

如果服務波動那麼它絕對不是穩定的。您正在使用哪個版本的1.3?當您使用一個節點時,請確保您已安裝並運行主服務器和輔助服務器。您可以從集羣管理器中看到這一點。來自日誌的信息不足以確定問題。

+0

如果您可以Vora 1.4,它會更好,因爲它比1.3更穩定。要獲得調試級別日誌,請轉至Vora manager UI - > services - >選擇目錄服務 - >在配置選項卡中,您將看到許多要設置的參數,並且應該有稱爲「log Level」的參數,設置爲調試。然後保存並重新啓動服務。希望這可以幫助! –