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:
Explain about URL and HTTPS protocol
Java Program to Implement Wagner and Fisher Algorithm for online String Matching
Java Program to Perform String Matching Using String Library
Versioning a REST API
Java Program to Perform Naive String Matching
Binary Numbers in Java
The Spring @Controller and @RestController Annotations
Spring Data JPA @Query
Check If a File or Directory Exists in Java
Java Program to Implement Interpolation Search Algorithm
New Features in Java 12
Constructor Injection in Spring with Lombok
Validations for Enum Types
REST Web service: HTTP Status Code và xử lý ngoại lệ RESTful web service với Jersey 2.x
Java Program to Perform Searching Based on Locality of Reference
Spring Boot Security Auto-Configuration
Lập trình đa luồng với Callable và Future trong Java
Java Program to Perform Finite State Automaton based Search
How to Get All Dates Between Two Dates?
Read an Outlook MSG file
Java Program to Implement Radix Sort
Spring Boot - Apache Kafka
HttpClient Connection Management
DynamoDB in a Spring Boot Application Using Spring Data
Java Program to Find the Vertex Connectivity of a Graph
Daemon Threads in Java
Java – InputStream to Reader
Introduction to Spring Security Expressions
LinkedHashSet trong Java hoạt động như thế nào?
Spring Boot - Interceptor
Java Program to Implement Queue using Linked List
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching