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:
Connect through a Proxy
@Lookup Annotation in Spring
An Intro to Spring Cloud Contract
Phương thức forEach() trong java 8
Java Program to Find Nearest Neighbor Using Linear Search
Java Program to Solve Travelling Salesman Problem for Unweighted Graph
Java Program to Implement Triply Linked List
Using JWT with Spring Security OAuth (legacy stack)
Java Copy Constructor
Java Program to Implement the Program Used in grep/egrep/fgrep
Java Program to Implement Disjoint Set Data Structure
Java – Write an InputStream to a File
Java – Write to File
Send email with SMTPS (eg. Google GMail)
Map to String Conversion in Java
Java – String to Reader
Java Program to Implement Park-Miller Random Number Generation Algorithm
@DynamicUpdate with Spring Data JPA
Abstract class và Interface trong Java
Java Program to Implement the RSA Algorithm
Guide to the Synchronized Keyword in Java
Thao tác với tập tin và thư mục trong Java
ExecutorService – Waiting for Threads to Finish
Call Methods at Runtime Using Java Reflection
Java Program to Implement Tarjan Algorithm
Constructor Injection in Spring with Lombok
Spring Security with Maven
Inject Parameters into JUnit Jupiter Unit Tests
Java Program to Implement Sparse Matrix
Guide to Java OutputStream
Java Program to Check if an UnDirected Graph is a Tree or Not Using DFS
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers