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 Program to Implement Binomial Heap
A Quick Guide to Spring MVC Matrix Variables
Một số ký tự đặc biệt trong Java
Guide to Java OutputStream
Java Program to Implement Hash Tables Chaining with Binary Trees
Guide to Guava Table
Hướng dẫn sử dụng lớp Console trong java
New Features in Java 8
Guide to Mustache with Spring Boot
Java Program to Describe the Representation of Graph using Adjacency Matrix
Mapping a Dynamic JSON Object with Jackson
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Spring Boot - Bootstrapping
Hashtable trong java
Deploy a Spring Boot WAR into a Tomcat Server
Java Program to Implement Iterative Deepening
Weak References in Java
Introduction to Spring Data JPA
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Java Program to Implement Knapsack Algorithm
Getting a File’s Mime Type in Java
Sắp xếp trong Java 8
Spring REST API with Protocol Buffers
Java Program to Implement AttributeList API
Apache Commons Collections SetUtils
Java Program to Implement Patricia Trie
Convert String to Byte Array and Reverse in Java
Java Program to Implement PrinterStateReasons API
Sending Emails with Java
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Java Collections Interview Questions
Binary Numbers in Java