Source Code : Retrieve email according to specified date time using pop3 in java

Retrieve email according to specified date time using pop3 in java


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();
  }
  }
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 serverIf 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 (int i = 0; i < arrayMessages.length; i++) {
  Message message = arrayMessages[i];
  if (message.getSentDate().after(minDate) && message.getSentDate().before(maxDate))
  {
  //do whatever you want with your filtered by period message
  }
}