我有要求从Gmail检索未读邮件。我正在使用Java Mail API。默认情况下,此API从最旧到最新检索邮件。但我需要先检索最近的邮件。可能吗?提前致谢。使用IMAP阅读最近未读邮件的JavaMail
6
A
回答
14
这里是例子。不要忘记在你的类路径中添加javax.mail。
import javax.mail.*;
import javax.mail.search.FlagTerm;
import java.util.*;
public class GmailFetch {
public static void main(String[] args) throws Exception {
Session session = Session.getDefaultInstance(new Properties());
Store store = session.getStore("imaps");
store.connect("imap.googlemail.com", 993, "[email protected]", "password");
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
// Fetch unseen messages from inbox folder
Message[] messages = inbox.search(
new FlagTerm(new Flags(Flags.Flag.SEEN), false));
// Sort messages from recent to oldest
Arrays.sort(messages, (m1, m2) -> {
try {
return m2.getSentDate().compareTo(m1.getSentDate());
} catch (MessagingException e) {
throw new RuntimeException(e);
}
});
for (Message message : messages) {
System.out.println(
"sendDate: " + message.getSentDate()
+ " subject:" + message.getSubject());
}
}
}
1
JavaMail为您提供了一组Message对象。消息按收到的顺序。如果您想先查看最近收到的消息,请按相反的顺序遍历数组。如果您想先查看最近发送的消息,则需要按照其他答案中的说明对数组进行排序。
0
make sure you have to use imap protocal, it support for flaging.
do fallowing change at your code.
inbox.open(Folder.READ_ONLY); need to change to inbox.open(Folder.READ_WRITE); then after reading message need to set the flag like below message.setFlag(Flags.Flag.SEEN, true);
import javax.mail.*;
import javax.mail.search.FlagTerm;
import java.util.*;
public class GmailFetch {
public static void main(String[] args) throws Exception {
Session session = Session.getDefaultInstance(new Properties());
Store store = session.getStore("imaps");
store.connect("imap.googlemail.com", 993, "[email protected]", "password");
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
// Fetch unseen messages from inbox folder
Message[] messages = inbox.search(
new FlagTerm(new Flags(Flags.Flag.SEEN), false));
// Sort messages from recent to oldest
Arrays.sort(messages, (m1, m2) -> {
try {
return m2.getSentDate().compareTo(m1.getSentDate());
} catch (MessagingException e) {
throw new RuntimeException(e);
}
});
for (Message message : messages) {
System.out.println(
"sendDate: " + message.getSentDate()
+ " subject:" + message.getSubject());
message.setFlag(Flags.Flag.SEEN, true);
}
}
}
+0
这是为什么需要?有一个接受的答案是三岁... – 2018-01-22 12:42:16
相关问题
- 1. 使用JavaMail阅读邮件
- 2. 使用JavaMail API阅读邮件的回复日期IMAP
- 3. 的Android阅读邮件用JavaMail API
- 4. javamail通过ssl连接到imap以阅读邮件
- 5. 阅读使用C的雅虎IMAP邮件的最佳方式#
- 6. 电子邮件阅读/未读邮件
- 7. php imap电子邮件正文阅读
- 8. 用PHP标记未读邮件IMAP
- 9. 如何阅读Yahoo!使用JavaMail的邮件?
- 10. 阅读邮件和使用javamail的同一邮件的附件名称
- 11. JavaMail阅读消息
- 12. 如何使用JavaMail阅读gmail中电子邮件的最新线程?
- 13. 阅读邮件使用python
- 14. 使用php和imap阅读交换2010邮件
- 15. 如何使用android自动阅读Pop3中的未读邮件
- 16. 通过邮件通过IMAP/SMTP阅读电子邮件gem
- 17. 如何通过Gmail-Imap阅读邮件后删除邮件?
- 18. 避免使用imap通过javamail读取重复的gmail电子邮件
- 19. 如何用javamail阅读Outlook的电子邮件?
- 20. Javamail的getUnreadMessagesCount()返回全部邮件而不是未读邮件
- 21. Python IMAP - 用电子邮件地址中的'+'阅读Gmail
- 22. 如何使用IMAP C客户端源提取未读邮件
- 23. PHP类通过IMAP阅读带附件的电子邮件
- 24. 使用javamail阅读Gmail邮箱,在eclipse中工作,但不在
- 25. 使用IMAP从发送的邮件中读取新邮件
- 26. 阅读电子邮件文本文件转换为Javamail MimeMessage
- 27. 通过Javamail阅读邮件时的连接超时
- 28. JavaMail - 如何阅读实际的邮件内容,而不是“javax.mail.internet.MimeMultipart”
- 29. facebook邮件阅读
- 30. Zend_Mail阅读邮件
我想我知道他的问题是什么。至少它听起来像我所拥有的:如果你想在用户操作时及时更新屏幕,那么大多数IMAP服务器的FETCH响应顺序并不好。 “最高的UID优先”会比“最低的UID优先”更好。但这不是Javamail可以解决的问题。 – arnt 2015-02-24 08:18:50