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:
Jackson – Marshall String to JsonNode
Xây dựng ứng dụng Client-Server với Socket trong Java
Java Program to Perform Arithmetic Operations on Numbers of Size
Filtering a Stream of Optionals in Java
Spring Boot with Multiple SQL Import Files
Java Program to Create the Prufer Code for a Tree
Getting Started with Forms in Spring MVC
Disable DNS caching
Debug a JavaMail Program
Tính kế thừa (Inheritance) trong java
Spring Cloud Connectors and Heroku
Java Program to Compute the Volume of a Tetrahedron Using Determinants
Java – Write a Reader to File
HttpClient 4 – Follow Redirects for POST
Java Program to Compute Cross Product of Two Vectors
Spring Boot Integration Testing with Embedded MongoDB
Spring Data JPA Delete and Relationships
Testing in Spring Boot
Guide to Escaping Characters in Java RegExps
Convert char to String in Java
Bootstrapping Hibernate 5 with Spring
Java Program to Implement vector
Spring @RequestParam Annotation
Java Program to Perform Left Rotation on a Binary Search Tree
Đồng bộ hóa các luồng trong Java
Giới thiệu JDBC Connection Pool
Using JWT with Spring Security OAuth
Spring Boot Change Context Path
Lớp LinkedHashMap trong Java
A Guide to BitSet in Java
Spring Boot - Google Cloud Platform
Java Program to Encode a Message Using Playfair Cipher