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 Ternary Search Tree
Binary Numbers in Java
Spring Security – Reset Your Password
Java Program to Implement Hamiltonian Cycle Algorithm
Kết hợp Java Reflection và Java Annotations
Loại bỏ các phần tử trùng trong một ArrayList như thế nào trong Java 8?
Java Program to Generate a Random Subset by Coin Flipping
Java Program to Represent Linear Equations in Matrix Form
Guava CharMatcher
Spring Boot - Securing Web Applications
Java equals() and hashCode() Contracts
Toán tử instanceof trong java
Giới thiệu Aspect Oriented Programming (AOP)
Java Program to Implement a Binary Search Algorithm for a Specific Search Sequence
Spring Boot - Twilio
Daemon Threads in Java
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Java Web Services – JAX-WS – SOAP
Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
Guide to Java 8’s Collectors
How to Add a Single Element to a Stream
Converting String to Stream of chars
Java Program to Check whether Directed Graph is Connected using DFS
An Introduction to ThreadLocal in Java
Guide to ThreadLocalRandom in Java
Spring Boot - Creating Docker Image
Java Program to Perform Cryptography Using Transposition Technique
OAuth 2.0 Resource Server With Spring Security 5
Sử dụng JDBC API thực thi câu lệnh truy vấn dữ liệu
Spring Boot - Bootstrapping
Tạo ứng dụng Java RESTful Client với thư viện Retrofit
Hướng dẫn Java Design Pattern – Iterator