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 Security Logout
Java Program to Implement Suffix Array
Logout in an OAuth Secured Application
Java Program to Generate a Graph for a Given Fixed Degree Sequence
“Stream has already been operated upon or closed” Exception in Java
Copy a List to Another List in Java
Map Serialization and Deserialization with Jackson
Java Program to Implement Max Heap
Guide to WeakHashMap in Java
Spring Web Annotations
Static Content in Spring WebFlux
Request a Delivery / Read Receipt in Javamail
Introduction to the Java NIO Selector
Join and Split Arrays and Collections in Java
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
HashMap trong Java hoạt động như thế nào?
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Guava – Join and Split Collections
Java Program to Implement Find all Back Edges in a Graph
Overview of the java.util.concurrent
Java Program to Implement Binomial Heap
Spring NoSuchBeanDefinitionException
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Guide to Java OutputStream
Spring MVC Content Negotiation
Java Program to Implement Min Heap
Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path
Comparing Two HashMaps in Java
Custom Thread Pools In Java 8 Parallel Streams
Jackson – Bidirectional Relationships
Java Program to Construct an Expression Tree for an Prefix Expression
Từ khóa throw và throws trong Java