2015-02-24 72 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

相关问题