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:
Spring Boot - Actuator
Converting String to Stream of chars
Call Methods at Runtime Using Java Reflection
Java – File to Reader
Java Program to Generate a Random UnDirected Graph for a Given Number of Edges
Spring Boot - Eureka Server
Uploading MultipartFile with Spring RestTemplate
New Stream Collectors in Java 9
Java Program to Implement Stack using Two Queues
Server-Sent Events in Spring
Java Program to Perform Cryptography Using Transposition Technique
Spring Boot - Admin Client
Spring Security Remember Me
Java Program to Implement Graph Coloring Algorithm
Java Program to Implement Binary Heap
Java Program to Implement Skip List
Java Program to Sort an Array of 10 Elements Using Heap Sort Algorithm
Default Password Encoder in Spring Security 5
Spring Boot - Tomcat Port Number
The Dining Philosophers Problem in Java
String Joiner trong Java 8
Object Type Casting in Java
Spring Boot - Admin Server
RestTemplate Post Request with JSON
Spring Boot Change Context Path
Java Program to Find a Good Feedback Edge Set in a Graph
Send an email with an attachment
Spring WebClient vs. RestTemplate
Connect through a Proxy
Simultaneous Spring WebClient Calls
OAuth2 for a Spring REST API – Handle the Refresh Token in AngularJS
Injecting Prototype Beans into a Singleton Instance in Spring