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 Solve Set Cover Problem assuming at max 2 Elements in a Subset
How to Store Duplicate Keys in a Map in Java?
Initialize a HashMap in Java
Guide to Java OutputStream
Getting Started with GraphQL and Spring Boot
Java Program to Perform Partition of an Integer in All Possible Ways
Server-Sent Events in Spring
Call Methods at Runtime Using Java Reflection
Spring Security Form Login
Hướng dẫn Java Design Pattern – Service Locator
Upload and Display Excel Files with Spring MVC
Lập trình mạng với java
Java Program to Check if a Given Binary Tree is an AVL Tree or Not
Spring Boot - Servlet Filter
Java Program to Compute the Area of a Triangle Using Determinants
Lập trình đa luồng với CompletableFuture trong Java 8
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Quick Guide to Spring Controllers
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
How to Read a File in Java
Guide to java.util.concurrent.Locks
Lớp Properties trong java
Java Program to Implement Floyd-Warshall Algorithm
Spring AMQP in Reactive Applications
Introduction to Spring Data JPA
Consuming RESTful Web Services
Add Multiple Items to an Java ArrayList
Java Program to Implement Pollard Rho Algorithm
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
Java Program to Solve any Linear Equation in One Variable
Serialize Only Fields that meet a Custom Criteria with Jackson
How to Set TLS Version in Apache HttpClient