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:
Giới thiệu Json Web Token (JWT)
How to Delay Code Execution in Java
A Guide to BitSet in Java
New Features in Java 10
Using Optional with Jackson
Các nguyên lý thiết kế hướng đối tượng – SOLID
Guide to WeakHashMap in Java
Refactoring Design Pattern với tính năng mới trong Java 8
Guide to the Fork/Join Framework in Java
Daemon Threads in Java
Java Program to Describe the Representation of Graph using Incidence Matrix
Custom Thread Pools In Java 8 Parallel Streams
Java Program to Implement Maximum Length Chain of Pairs
Serialize Only Fields that meet a Custom Criteria with Jackson
Giới thiệu Design Patterns
Tính đa hình (Polymorphism) trong Java
Hướng dẫn Java Design Pattern – Singleton
Java Program to implement Associate Array
Sử dụng JDBC API thực thi câu lệnh truy vấn dữ liệu
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
A Guide to the Java ExecutorService
Rate Limiting in Spring Cloud Netflix Zuul
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing
Java Program to Remove the Edges in a Given Cyclic Graph such that its Linear Extension can be Found
Practical Java Examples of the Big O Notation
Bootstrapping Hibernate 5 with Spring
Spring Security Remember Me
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
A Guide to LinkedHashMap in Java
Java Program to Implement Stack
Java Program to Implement HashSet API
Tránh lỗi NullPointerException trong Java như thế nào?