Android 使用带有POP3或IMAPS协议的javamail检索所有uread电子邮件
我正在开发一个应用程序,我想获取所有邮件,无论是已读邮件还是未读邮件。谁能帮助我如何实现此功能? 在这里,我使用的是IMAP,但在这段代码中,我面临着这个问题Android 使用带有POP3或IMAPS协议的javamail检索所有uread电子邮件,android,imap,pop3,Android,Imap,Pop3,我正在开发一个应用程序,我想获取所有邮件,无论是已读邮件还是未读邮件。谁能帮助我如何实现此功能? 在这里,我使用的是IMAP,但在这段代码中,我面临着这个问题 @Override protected Void doInBackground(Void... voids) { Properties props = new Properties(); //IMAPS protocol props.setProperty("mail.st
@Override
protected Void doInBackground(Void... voids) {
Properties props = new Properties();
//IMAPS protocol
props.setProperty("mail.store.protocol", "IMAP");
//Set host address
props.setProperty("mail.host", "IMAP.gmail.com");
//Set specified port
props.setProperty("mail.IMAP.port", "993");
props.setProperty("mail.transport.protocol", "IMAP");
props.setProperty("mail.imap.ssl.trust", "*");
session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("abc@gmail.com", "abcd");
}
});
try {
Store store = session.getStore("IMAP");
store.connect();
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.search(new FlagTerm(
new Flags(Flags.Flag.SEEN), false));
for (int i = 0; i < messages.length; i++) {
Message message = messages[i]; Address[] from = message.getFrom(); System.out.println("-------------------------------");
System.out.println("Date : " + message.getSentDate());
System.out.println("From : " + from[0]);
System.out.println("Subject: " + message.getSubject());
System.out.println("Content :");
processMessageBody(message);
System.out.println("--------------------------------");
}
inbox.close(true);
store.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
public void processMessageBody(Message message) {
try { Object content = message.getContent();
// check for string
// then check for multipart
if (content instanceof String) {
System.out.println(content);
} else if (content instanceof Multipart)
{ Multipart multiPart = (Multipart) content;
procesMultiPart(multiPart);
} else if (content instanceof InputStream) {
InputStream inStream = (InputStream) content;
int ch; while ((ch = inStream.read()) != -1) {
System.out.write(ch);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
} public void procesMultiPart(Multipart content) {
try {
int multiPartCount = content.getCount();
for (int i = 0; i < multiPartCount; i++) {
BodyPart bodyPart = content.getBodyPart(i);
Object o; o = bodyPart.getContent();
if (o instanceof String) {
System.out.println(o);
} else if (o instanceof Multipart) {
procesMultiPart((Multipart) o);
}
}
} catch (IOException e)
{ e.printStackTrace();
} catch (MessagingException e)
{ e.printStackTrace(); }
}`
@覆盖
受保护的空位背景(空位…空位){
Properties props=新属性();
//IMAPS协议
props.setProperty(“mail.store.protocol”、“IMAP”);
//设置主机地址
props.setProperty(“mail.host”、“IMAP.gmail.com”);
//设置指定的端口
props.setProperty(“mail.IMAP.port”、“993”);
props.setProperty(“mail.transport.protocol”、“IMAP”);
props.setProperty(“mail.imap.ssl.trust”,“*”);
session=session.getInstance(道具,
新的javax.mail.Authenticator(){
受保护的密码身份验证getPasswordAuthentication(){
返回新密码身份验证(“abc@gmail.com“,”abcd“);
}
});
试一试{
Store Store=session.getStore(“IMAP”);
store.connect();
收件箱=store.getFolder(“收件箱”);
收件箱。打开(文件夹。只读);
messages[]=收件箱。搜索(新标记词(
新标志(Flags.Flag.SEEN),false);
for(int i=0;i
此代码段没有按照所需的输出工作,请告诉我哪里做错了,它在调用message.getContent时出现异常
方法引发了“java.lang.NoClassDefFoundError”异常
最简单的官方解决方案:
特别注意方法
getDataFromApi
中的调用。这很简单,我已经实现了这个功能,并做了一些改进。您做了哪些尝试?你的密码在哪里?在线和StackOverflow上都有成百上千的Javamail示例。POP3没有“已读”或“未读”的概念,因此您不能使用它来实现您的目标。嗨,Max,我已经附上了代码片段,请告诉我如何实现所需的输出。提前感谢您是否将java mail jar包含在应用程序中,并确保它与您编译的版本相同?谢谢Jantursky,我已经试过了,它在Gmail上运行得很好,但我也想和其他领域,如雅虎,outlook等建立联系