Receive email using POP3

POP3 supports simple download-and-delete requirements for access to remote mailboxes.

Java Mail comes with Provider implementations for POP3 and IMAP, and the secure versions of those as POP3S and IMAPS.

This Howto connects to a server using the POP3S (Secure, encrypted POP3) to download messages with or without attachments and save them into files.

import java.io.*;
import java.util.*;
import javax.mail.*;

import javax.mail.internet.MimeBodyPart;

public class ReceiveMailPOP3 {
  private static final String HOST = "pop.gmail.com";
  private static final String USERNAME = "myemail@gmail.com";
  private static final String PASSWORD = "******";

  public static void doit() throws MessagingException, IOException {
    Folder folder = null;
    Store store = null;
    try {
      Properties props = new Properties();
      props.put("mail.store.protocol", "pop3s"); // Google uses POP3S not POP3
      Session session = Session.getDefaultInstance(props);
      // session.setDebug(true);
      store = session.getStore();
      store.connect(HOST, USERNAME, PASSWORD);
      folder = store.getDefaultFolder().getFolder("INBOX");
      folder.open(Folder.READ_ONLY);
      Message[] messages = folder.getMessages();
      System.out.println("No of Messages : " + folder.getMessageCount());
      System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
      for (int i=0; i < messages.length; ++i) {
        System.out.println("MESSAGE #" + (i + 1) + ":");
        Message msg = messages[i];
        String from = "unknown";
        if (msg.getReplyTo().length >= 1) {
          from = msg.getReplyTo()[0].toString();
        }
        else if (msg.getFrom().length >= 1) {
          from = msg.getFrom()[0].toString();
        }
        String subject = msg.getSubject();
        System.out.println("Saving ... " + subject +" " + from);
        // you may want to replace the spaces with "_"
        // the files will be saved into the TEMP directory
        String filename = "c:/temp/" +  subject;
        saveParts(msg.getContent(), filename);
      }
    }
    finally {
      if (folder != null) { folder.close(true); }
      if (store != null) { store.close(); }
    }
  }

  public static void saveParts(Object content, String filename)
  throws IOException, MessagingException
  {
    OutputStream out = null;
    InputStream in = null;
    try {
      if (content instanceof Multipart) {
        Multipart multi = ((Multipart)content);
        int parts = multi.getCount();
        for (int j=0; j < parts; ++j) {
          MimeBodyPart part = (MimeBodyPart)multi.getBodyPart(j);
          if (part.getContent() instanceof Multipart) {
            // part-within-a-part, do some recursion...
            saveParts(part.getContent(), filename);
          }
          else {
            String extension = "";
            if (part.isMimeType("text/html")) {
              extension = "html";
            }
            else {
              if (part.isMimeType("text/plain")) {
                extension = "txt";
              }
              else {
                //  Try to get the name of the attachment
                extension = part.getDataHandler().getName();
              }
              filename = filename + "." + extension;
              System.out.println("... " + filename);
              out = new FileOutputStream(new File(filename));
              in = part.getInputStream();
              int k;
              while ((k = in.read()) != -1) {
                out.write(k);
              }
            }
          }
        }
      }
    }
    finally {
      if (in != null) { in.close(); }
      if (out != null) { out.flush(); out.close(); }
    }
  }

  public static void main(String args[]) throws Exception {
    ReceiveMailPOP3.doit();
  }
}

Done! Happy Coding!

Related posts:

Java – Reader to Byte Array
Sử dụng Fork/Join Framework với ForkJoinPool trong Java
4 tính chất của lập trình hướng đối tượng trong Java
How To Serialize and Deserialize Enums with Jackson
Partition a List in Java
Convert Time to Milliseconds in Java
Java Program to Implement ArrayBlockingQueue API
Shuffling Collections In Java
Converting String to Stream of chars
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Collect a Java Stream to an Immutable Collection
Adding Shutdown Hooks for JVM Applications
Ways to Iterate Over a List in Java
Hướng dẫn Java Design Pattern – Strategy
The Spring @Controller and @RestController Annotations
Java Program to Generate All Possible Subsets with Exactly k Elements in Each Subset
Java Program to Implement Shell Sort
How to Change the Default Port in Spring Boot
Guide to Selenium with JUnit / TestNG
Java Program to Check Multiplicability of Two Matrices
Từ khóa throw và throws trong Java
Java Program to Implement Fermat Factorization Algorithm
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Java Program to Describe the Representation of Graph using Adjacency Matrix
Java Program to Implement Strassen Algorithm
How to Break from Java Stream forEach
Mapping Nested Values with Jackson
Java Program to Perform Searching Based on Locality of Reference
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Spring Boot: Customize the Jackson ObjectMapper
Java Program to Implement Expression Tree
OAuth2 for a Spring REST API – Handle the Refresh Token in AngularJS