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 Implement Binary Tree
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Implement Patricia Trie
So sánh ArrayList và LinkedList trong Java
Calling Stored Procedures from Spring Data JPA Repositories
Spring Security and OpenID Connect
Phương thức tham chiếu trong Java 8 – Method References
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Quick Guide to Spring MVC with Velocity
New Features in Java 13
So sánh HashMap và Hashtable trong Java
Java – Convert File to InputStream
Object cloning trong java
Changing Annotation Parameters At Runtime
Zipping Collections in Java
Java Program to Find the Shortest Path Between Two Vertices Using Dijkstra’s Algorithm
New Features in Java 15
Iterable to Stream in Java
Tìm hiểu về Web Service
ArrayList trong java
Guide to java.util.Formatter
Assert an Exception is Thrown in JUnit 4 and 5
Java Program to Implement a Binary Search Algorithm for a Specific Search Sequence
LinkedList trong java
Java Program to Implement Max-Flow Min-Cut Theorem
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
What is a POJO Class?
New Features in Java 14
Java Program to Implement ArrayDeque API
New Features in Java 12
Database Migrations with Flyway
Send an email using the SMTP protocol