我有要求從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