IMAP presents mail messages as entries in a hierarchy of folders, one of which will be an inbox.
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 Google Mail account with IMAPS. IMAP protocol is more advanced than POP. With IMAP, you can talk back to the server and sync your changes automatically.
This Howto connects to a server using the IMAPS (Secure, encrypted IMAP) 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.*; public class ReceiveMailImap { public ReceiveMailImap() {} // // inspired by : // http://www.mikedesjardins.net/content/2008/03/using-javamail-to-read-and-extract/ // public static void doit() throws MessagingException, IOException { Folder folder = null; Store store = null; try { Properties props = System.getProperties(); props.setProperty("mail.store.protocol", "imaps"); Session session = Session.getDefaultInstance(props, null); // session.setDebug(true); store = session.getStore("imaps"); store.connect("imap.gmail.com","myemail@gmail.com", "******"); folder = store.getFolder("Inbox"); /* Others GMail folders : * [Gmail]/All Mail This folder contains all of your Gmail messages. * [Gmail]/Drafts Your drafts. * [Gmail]/Sent Mail Messages you sent to other people. * [Gmail]/Spam Messages marked as spam. * [Gmail]/Starred Starred messages. * [Gmail]/Trash Messages deleted from Gmail. */ folder.open(Folder.READ_WRITE); 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]; /* if we don''t want to fetch messages already processed if (!msg.isSet(Flags.Flag.SEEN)) { String from = "unknown"; ... } */ 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 TEMP directory is used to store the files String filename = "c:/temp/" + subject; saveParts(msg.getContent(), filename); msg.setFlag(Flags.Flag.SEEN,true); // to delete the message // msg.setFlag(Flags.Flag.DELETED, true); } } 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 { ReceiveMailImap.doit(); } }
Done! Happy Coding!
Related posts:
Java Program to Implement Patricia Trie
Remove All Occurrences of a Specific Value from a List
Giới thiệu luồng vào ra (I/O) trong Java
Java Program to Implement Network Flow Problem
Constructor Dependency Injection in Spring
Spring Cloud – Securing Services
Introduction to PCollections
Java Web Services – JAX-WS – SOAP
Convert String to Byte Array and Reverse in Java
Java Program to Implement Hash Tree
Guide to Dynamic Tests in Junit 5
Java Program to implement Associate Array
Java Program to Decode a Message Encoded Using Playfair Cipher
Java Program to Implement the MD5 Algorithm
Spring REST with a Zuul Proxy
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
Send email with authentication
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Command-Line Arguments in Java
Spring Boot Change Context Path
Guide to the Volatile Keyword in Java
SOAP Web service: Authentication trong JAX-WS
Java Timer
Spring – Injecting Collections
A Guide to the Java ExecutorService
Tránh lỗi NullPointerException trong Java như thế nào?
Finding the Differences Between Two Lists in Java
An Intro to Spring Cloud Vault
Tính trừu tượng (Abstraction) trong Java
OAuth 2.0 Resource Server With Spring Security 5
Getting Started with Stream Processing with Spring Cloud Data Flow
Comparing Long Values in Java