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:
Spring Boot - Zuul Proxy Server and Routing
Java Program to Check whether Directed Graph is Connected using BFS
Java Program to Implement Find all Back Edges in a Graph
Java Program to Generate N Number of Passwords of Length M Each
Java Program to Implement Multi-Threaded Version of Binary Search Tree
Spring Boot - Interceptor
Read an Outlook MSG file
Java Program to Implement Knight’s Tour Problem
The Spring @Controller and @RestController Annotations
A Guide to TreeMap in Java
OAuth2 for a Spring REST API – Handle the Refresh Token in AngularJS
Examine the internal DNS cache
Java Program to Implement Uniform-Cost Search
4 tính chất của lập trình hướng đối tượng trong Java
Introduction to the Java ArrayDeque
Java Program to Implement Gauss Seidel Method
Using a List of Values in a JdbcTemplate IN Clause
Convert XML to JSON Using Jackson
Java Program to Print only Odd Numbered Levels of a Tree
Java Program to Implement the One Time Pad Algorithm
Spring 5 Testing with @EnabledIf Annotation
Java Program to Implement Merge Sort Algorithm on Linked List
Hướng dẫn Java Design Pattern – Composite
Java Program to Perform Partition of an Integer in All Possible Ways
Java Program to Perform Cryptography Using Transposition Technique
Java – Reader to InputStream
HashMap trong Java hoạt động như thế nào?
Spring RestTemplate Request/Response Logging
Java Program to Implement Aho-Corasick Algorithm for String Matching
Generate Spring Boot REST Client with Swagger
Spring’s RequestBody and ResponseBody Annotations
A Guide to Java HashMap