Search code examples
javaemailjakarta-mail

Java Mail API to search for particular address


i would like to search my inbox through java api filtering particular address... For Eg., i would like to search all the mails from particular emailid say [email protected] and do a sysout.

Store store = emailSession.getStore("pop3s");
store.connect(host, user, password);
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
Flags seen = new Flags(Flags.Flag.SEEN);
FlagTerm unseenFlagTerm = new FlagTerm(seen, true);
Message unreadMessages[] = emailFolder.search(unseenFlagTerm);

for (int i = unreadMessages.length-1; i > 0 ; i--) {
  System.out.println("Subject : " + unreadMessages[i].getSubject());
  System.out.println("From : " + unreadMessages[i].getFrom()[0]);
}

Solution

  • Assuming that the code you posted works, using a simple loop, it would be something like:

    FlagTerm unseenFlagTerm = new FlagTerm(seen, true);
    Message[] unreadMessages = emailFolder.search(unseenFlagTerm);
    Address searchFrom = new InternetAddress("[email protected]");
    
    for (int i = unreadMessages.length-1; i > 0 ; i--) {
        Message message = unreadMessages[i];
    
        if(Arrays.asList(message.getFrom()).contains(searchFrom)) {
            System.out.println("Subject : " + message.getSubject());
        }
    }
    

    Alternatively, you can use a FromTerm:

    FlagTerm unseenFlagTerm = new FlagTerm(seen, true);
    FromTerm fromTerm = new FromTerm(new InternetAddress("[email protected]"));
    SearchTerm searchTerm = new AndTerm(unseenFlagTerm, fromTerm);
    
    Message[] messages = emailFolder.search(searchTerm);
    
    for (int i = messages.length-1; i > 0 ; i--) {
        System.out.println("Subject : " + message.getSubject());
    }