邮件JAVA中的读取错误

问题描述:

我正在阅读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服务的日志级别。 –

如果服务波动那么它绝对不是稳定的。您正在使用哪个版本的1.3?当您使用一个节点时,请确保您已安装并运行主服务器和辅助服务器。您可以从集群管理器中看到这一点。来自日志的信息不足以确定问题。

+0

如果您可以Vora 1.4,它会更好,因为它比1.3更稳定。要获得调试级别日志,请转至Vora manager UI - > services - >选择目录服务 - >在配置选项卡中,您将看到许多要设置的参数,并且应该有称为“log Level”的参数,设置为调试。然后保存并重新启动服务。希望这可以帮助! –