Retrieve email according to specified date time using POP3 in Java

12,225

Searching for a period or in general by time is done by the server only if you use IMAP to connect. Example:

SearchTerm term = null;

Calendar cal = null;
cal = Calendar.getInstance();
Date minDate = new Date(cal.getTimeInMillis());   //get today date

cal.add(Calendar.DAY_OF_MONTH, 1);                //add 1 day
Date maxDate = new Date(cal.getTimeInMillis());   //get tomorrow date
ReceivedDateTerm minDateTerm = new ReceivedDateTerm(ComparisonTerm.GE, minDate);
ReceivedDateTerm maxDateTerm = new ReceivedDateTerm(ComparisonTerm.LE, maxDate);

term = new AndTerm(term, minDateTerm);            //concat the search terms
term = new AndTerm(term, maxDateTerm);

Message messages[] = folderInbox.search(term);    //search on the imap server

If you instead of IMAP use POP3, I guess your only choice is to filter (on the client) on the entire list of messages that you fetched from the server, iterating over it, like @user2310289 was telling you:

for (Message message : messages) {
    if (message.getSentDate().after(minDate) && message.getSentDate().before(maxDate))
       {
          //do whatever you want with your filtered by period message
       } 
}

I hope I helped you.

Share:
12,225
Chintamani
Author by

Chintamani

Updated on June 05, 2022

Comments

  • Chintamani
    Chintamani about 2 years

    I got all the mail, but I want to extract mail according to the date.

    public void downloadEmailAttachments(String host, String port,String userName, String password) {
            Properties properties = new Properties();
            properties.put("mail.pop3.host", host);
            properties.put("mail.pop3.port", port);
            properties.put("mail.pop3.user",userName);
            properties.put("mail.password",password);
    
            // SSL setting
            properties.setProperty("mail.pop3.socketFactory.class",
                    "javax.net.ssl.SSLSocketFactory");
            properties.setProperty("mail.pop3.socketFactory.fallback", "false");
            properties.setProperty("mail.pop3.socketFactory.port",
                    String.valueOf(port));
    
            Session session = Session.getDefaultInstance(properties);
    
            try {
                // connects to the message store
                Store store = session.getStore("pop3");
                store.connect(host,userName, password);//change here............
    
                Folder folderInbox = store.getFolder("INBOX");
    
                folderInbox.open(Folder.READ_ONLY);
    
              Message[] arrayMessages = folderInbox.getMessages();
    
    
    
    
                 for (int i = 0; i < arrayMessages.length; i++) {
                    Message message = arrayMessages[i];
                    Address[] fromAddress = message.getFrom();
                    String from = fromAddress[0].toString();
                    Address[]toAdress=message.getAllRecipients();
                    String to=toAdress[0].toString();
                    String subject = message.getSubject();
                    String sentDate = message.getSentDate().toString();
                    String contentType = message.getContentType().toString();
    
                    String messageContent = "";
    
                    // store attachment file name, separated by comma
                    String attachFiles = "";
    
                    if (contentType.contains("multipart")) {
                        // content may contain attachments
                        Multipart multiPart = (Multipart) message.getContent();
                        int numberOfParts = multiPart.getCount();
                        for (int partCount = 0; partCount < numberOfParts; partCount++) {
                            MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
                            if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
                                // this part is attachment
                                String fileName = part.getFileName();
                                attachFiles += fileName + ", ";
                                part.saveFile(saveDirectory + File.separator + fileName);
    
                            } else {
                                // this part may be the message content
                                messageContent = part.getContent().toString();
                            }
                        }
    
                        if (attachFiles.length() > 1) {
                            attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
                        }
                    } else if (contentType.contains("text/plain")
                            || contentType.contains("text/html")) {
                        Object content = message.getContent();
                        if (content != null) {
                            messageContent = content.toString();
                        }
                    }
    
                    // print out details of each message
                    System.out.println("Message #" + (i + 1) + ":");
                    System.out.println("\t From: " + from);
                    System.out.println("\t to: " + to);
                    System.out.println("\t Subject: " + subject);
                    System.out.println("\t Sent Date: " + sentDate);
                    System.out.println("\t Message: " + messageContent);
                    System.out.println("\t Attachments: " + attachFiles);
                }
    
                // disconnect...............
                folderInbox.close(false);
                store.close();
            } catch (NoSuchProviderException ex) {
                System.out.println("No provider for pop3.");
                ex.printStackTrace();
            } catch (MessagingException ex) {
                System.out.println("Could not connect to the message store");
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    
  • Jerry
    Jerry almost 5 years
    Is there a solution for this issue ?Because I have lakhs of email in my inbox and i have a cron job which runs every minute reading the inbox. I have to support both imap and pop3, I am stuck with pop3
  • Anuj Victor
    Anuj Victor over 4 years
    is there anyway to filter according to time?
  • selvan
    selvan over 4 years
    This code handled only date. But we need time also. How can we use it?