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:
Ignore Null Fields with Jackson
Java Program to Implement Cartesian Tree
Setting the Java Version in Maven
Hướng dẫn Java Design Pattern – Decorator
Handling URL Encoded Form Data in Spring REST
Testing in Spring Boot
Object cloning trong java
Kết hợp Java Reflection và Java Annotations
Java Program to Implement Johnson’s Algorithm
Java Program to Apply Above-Below-on Test to Find the Position of a Point with respect to a Line
Intro to Spring Boot Starters
Java Program to Implement Rope
Life Cycle of a Thread in Java
Daemon Threads in Java
Spring Cloud AWS – RDS
Java Program to Implement Bubble Sort
Java Program to Implement Triply Linked List
Java Program to Implement EnumMap API
Working with Kotlin and JPA
Static Content in Spring WebFlux
Consumer trong Java 8
Java Program to Implement TreeSet API
Logging in Spring Boot
Java Program to Implement Fenwick Tree
Logout in an OAuth Secured Application
Guide to Character Encoding
Java Convenience Factory Methods for Collections
Spring Boot Configuration with Jasypt
File Upload with Spring MVC
Adding Parameters to HttpClient Requests
Rest Web service: Filter và Interceptor với Jersey 2.x (P1)
Database Migrations with Flyway