邮件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);
}
}
在此先感谢
答
如果服务波动那么它绝对不是稳定的。您正在使用哪个版本的1.3?当您使用一个节点时,请确保您已安装并运行主服务器和辅助服务器。您可以从集群管理器中看到这一点。来自日志的信息不足以确定问题。
+0
如果您可以Vora 1.4,它会更好,因为它比1.3更稳定。要获得调试级别日志,请转至Vora manager UI - > services - >选择目录服务 - >在配置选项卡中,您将看到许多要设置的参数,并且应该有称为“log Level”的参数,设置为调试。然后保存并重新启动服务。希望这可以帮助! –
日志不确定。您的服务似乎在“传递”和“失败”之间波动的事实可能表明存在资源瓶颈。有趣的是,还可以通过DEBUG级别日志来查看目录日志。 –
@FrankLegler感谢您的好评。我在哪里可以找到调试级别日志? –
您可以更改Vora Manager UI中不同Vora服务的日志级别。 –