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:
4 tính chất của lập trình hướng đối tượng trong Java
Create a Custom Exception in Java
The Guide to RestTemplate
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Spring Cloud Connectors and Heroku
Guide to CopyOnWriteArrayList
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Java Program to Implement Word Wrap Problem
Spring 5 and Servlet 4 – The PushBuilder
HttpAsyncClient Tutorial
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Returning Custom Status Codes from Spring Controllers
Removing Elements from Java Collections
Java Copy Constructor
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Hướng dẫn Java Design Pattern – Decorator
Java Program to Implement String Matching Using Vectors
Custom Exception trong Java
Programmatic Transaction Management in Spring
Tạo ứng dụng Java RESTful Client với thư viện OkHttp
Filtering a Stream of Optionals in Java
Giới thiệu Json Web Token (JWT)
LinkedHashSet trong Java hoạt động như thế nào?
Java Program to Implement Booth Algorithm
Converting Java Date to OffsetDateTime
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
Java Program to Use rand and srand Functions
Spring WebClient Requests with Parameters
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Java 8 Collectors toMap
Java Program to Perform Sorting Using B-Tree
Autoboxing và Unboxing trong Java