Table of Contents
1. Loading an .EML file
When saving an email to a file, the resulting file has an eml extension (email files–which are in RFC 822 format). This kind of file can be read and parsed by JavaMail.
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
public class ReadEmail {
public static void main(String args[]) throws Exception{
display(new File("C:\\temp\\message.eml"));
}
public static void display(File emlFile) throws Exception{
Properties props = System.getProperties();
props.put("mail.host", "smtp.dummydomain.com");
props.put("mail.transport.protocol", "smtp");
Session mailSession = Session.getDefaultInstance(props, null);
InputStream source = new FileInputStream(emlFile);
MimeMessage message = new MimeMessage(mailSession, source);
System.out.println("Subject : " + message.getSubject());
System.out.println("From : " + message.getFrom()[0]);
System.out.println("--------------");
System.out.println("Body : " + message.getContent());
}
}
A typical eml looks like this:
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Received: from tomts25-srv.bellnexxia.net
(tomts25.bellnexxia.net [209.226.175.188])
by tactika.com (8.9.3/8.9.3) with ESMTP id NAA07621
for <real@rgagnon.com>; Sun, 1 Feb 2004 13:25:33 -0500 (EST)
Date: Sun, 01 Feb 2004 13:31:40 -0500
From: real gagnon <real@rgagnon.com>
Reply-To: real@rgagnon.com
User-Agent: Mozilla/5.0
(Windows; U; Windows NT 5.1; en-US; rv:1.4)
Gecko/20030624 Netscape/7.1 (ax)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: real@rgagnon.com
Subject: Example for HowTo
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
X-UIDL: oP#!!c]^!!1;-!!T@1"!
Running the above HowTo gives this output:
Subject : Example for HowTo From : real gagnon <real@rgagnon.com> -------------- Body : This is an example for HowTo
2. Saving an email to .EML file
First you connect to the mail server with POP3 or IMAP protocol to retrieve the emails.
...
folder = store.getDefaultFolder().getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
...
for (int i=0; i < messages.length; ++i) {
Message msg = messages[i];
String subject = msg.getSubject();
processSaveToFile(msg, subject);
...
}
...
Individual email are represented by the Message class.
private void processSaveToFile (javax.mail.Message msg, String subject)
throws MessagingException, IOException
{
String whereToSave = "c:/temp/ + sanitizeFilename(subject) + ".eml";
logger.info("Sauvegarde vers "+ whereToSave);
OutputStream out = new FileOutputStream(new File(whereToSave));
try {
msg.writeTo(out);
}
finally {
if (out != null) { out.flush(); out.close(); }
}
}
Since the subject is used to set the filename, it’s not a bad idea to sanitize it to remove illegal characters.
private static String sanitizeFilename(String name) {
return name.replaceAll("[:\\\\/*?|<> \"]", "_");
}
Done! Happy Coding!
Related posts:
Java Program to Emulate N Dice Roller
Anonymous Classes in Java
An Intro to Spring Cloud Task
Retrieve User Information in Spring Security
Guide to System.gc()
A Quick Guide to Spring MVC Matrix Variables
Prevent Cross-Site Scripting (XSS) in a Spring Application
Tránh lỗi NullPointerException trong Java như thế nào?
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Một số từ khóa trong Java
A Guide To UDP In Java
Hướng dẫn Java Design Pattern – Dependency Injection
Implementing a Runnable vs Extending a Thread
Debugging Reactive Streams in Java
A Guide to System.exit()
Spring WebFlux Filters
Java Program to Implement LinkedBlockingDeque API
Java – Generate Random String
Returning Image/Media Data with Spring MVC
Spring @RequestParam Annotation
Comparing Objects in Java
Phương thức forEach() trong java 8
Lập trình mạng với java
Java Program to Find Transitive Closure of a Graph
Count Occurrences of a Char in a String
Quick Guide to Spring Bean Scopes
How To Serialize and Deserialize Enums with Jackson
How to Get a Name of a Method Being Executed?
A Guide to Java HashMap
Spring Boot - Cloud Configuration Client
An Intro to Spring Cloud Contract
Custom Thread Pools In Java 8 Parallel Streams