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:
Guide to Mustache with Spring Boot
Java Program to Delete a Particular Node in a Tree Without Using Recursion
List Interface trong Java
Spring Cloud – Tracing Services with Zipkin
Using the Map.Entry Java Class
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
Java toString() Method
Spring Data MongoDB – Indexes, Annotations and Converters
Java Program to Solve Set Cover Problem assuming at max 2 Elements in a Subset
Creating a Web Application with Spring 5
Filtering a Stream of Optionals in Java
Java Program to Find the Minimum value of Binary Search Tree
Get the workstation name or IP
New Features in Java 14
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Simple Single Sign-On with Spring Security OAuth2
Uploading MultipartFile with Spring RestTemplate
A Guide to System.exit()
RegEx for matching Date Pattern in Java
Một số ký tự đặc biệt trong Java
Default Password Encoder in Spring Security 5
Java – Write to File
Semaphore trong Java
Java InputStream to String
Java – Byte Array to Reader
Hướng dẫn Java Design Pattern – Mediator
Using Java Assertions
Java Program to Find Transpose of a Graph Matrix
Hướng dẫn Java Design Pattern – Observer
REST Web service: HTTP Status Code và xử lý ngoại lệ RESTful web service với Jersey 2.x
Java Program to Perform Polygon Containment Test
Hướng dẫn Java Design Pattern – Abstract Factory