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 Heap Sort Using Library Functions
Java Program to Implement Cartesian Tree
HashMap trong Java hoạt động như thế nào?
Hashing a Password in Java
Java Program to Implement Sparse Matrix
Remove the First Element from a List
Java Program to Check Whether Graph is DAG
Java Program to Solve TSP Using Minimum Spanning Trees
Java Program to Implement Hash Tables Chaining with Doubly Linked Lists
Guide to java.util.concurrent.BlockingQueue
Phương thức tham chiếu trong Java 8 – Method References
Java Program to Implement a Binary Search Tree using Linked Lists
Java Program to Create a Random Linear Extension for a DAG
File Upload with Spring MVC
A Guide to ConcurrentMap
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Working with Tree Model Nodes in Jackson
New Features in Java 9
Java Program to Implement TreeMap API
Abstract class và Interface trong Java
Java Program to Implement the Bin Packing Algorithm
Spring Security Logout
Generic Constructors in Java
Converting a Stack Trace to a String in Java
Java Program to Check whether Directed Graph is Connected using DFS
Auditing with JPA, Hibernate, and Spring Data JPA
A Guide to the ViewResolver in Spring MVC
Tính kế thừa (Inheritance) trong java
Java Program to Implement Min Hash
Using a Spring Cloud App Starter
Java Program to Construct a Random Graph by the Method of Random Edge Selection