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.
Author by
Chintamani
Updated on June 05, 2022Comments
-
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 almost 5 yearsIs 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 over 4 yearsis there anyway to filter according to time?
-
selvan over 4 yearsThis code handled only date. But we need time also. How can we use it?