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:
New Features in Java 8
Spring MVC Async vs Spring WebFlux
Easy Ways to Write a Java InputStream to an OutputStream
So sánh HashMap và HashSet trong Java
Tìm hiểu về Web Service
Request Method Not Supported (405) in Spring
Static Content in Spring WebFlux
Introduction to Spring Method Security
How to Kill a Java Thread
Spring Boot Configuration with Jasypt
Guide to Java OutputStream
Java Program to Implement LinkedList API
Java Program to Implement LinkedBlockingQueue API
Convert Hex to ASCII in Java
Mảng (Array) trong Java
Java Program to Implement LinkedBlockingDeque API
ExecutorService – Waiting for Threads to Finish
Giới thiệu luồng vào ra (I/O) trong Java
Hướng dẫn sử dụng Java Generics
Converting String to Stream of chars
Connect through a Proxy
Guide to Dynamic Tests in Junit 5
Registration – Activate a New Account by Email
Java Program to Perform String Matching Using String Library
The HttpMediaTypeNotAcceptableException in Spring MVC
Java Program to Implement Karatsuba Multiplication Algorithm
Converting a Stack Trace to a String in Java
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Filtering and Transforming Collections in Guava
Java Program to Find a Good Feedback Vertex Set
Spring Security 5 – OAuth2 Login
Period and Duration in Java