2015-02-24 71 views

回答

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

我想我知道他的問題是什麼。至少它聽起來像我所擁有的:如果你想在用戶操作時及時更新屏幕,那麼大多數IMAP服務器的FETCH響應順序並不好。 「最高的UID優先」會比「最低的UID優先」更好。但這不是Javamail可以解決的問題。 – arnt 2015-02-24 08:18:50

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

相關問題