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:
Tìm hiểu về Web Service
Introduction to Java Serialization
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Simple Single Sign-On with Spring Security OAuth2
Spring @Primary Annotation
Tìm hiểu về xác thực và phân quyền trong ứng dụng
Hướng dẫn sử dụng Lớp FilePermission trong java
Generate Spring Boot REST Client with Swagger
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Vấn đề Nhà sản xuất (Producer) – Người tiêu dùng (Consumer) và đồng bộ hóa các luồng trong Java
Java Program to Implement Stack
Spring Security with Maven
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Spring Boot - Batch Service
Spring Boot Gradle Plugin
Checking for Empty or Blank Strings in Java
New Features in Java 15
Java – Get Random Item/Element From a List
Java Program to Implement Heap Sort Using Library Functions
Hướng dẫn Java Design Pattern – Iterator
Biến trong java
Java Program to Implement the MD5 Algorithm
Java Program to Implement Kosaraju Algorithm
Java Program to Find a Good Feedback Vertex Set
Java Program to Implement Depth-limited Search
Java Program to Implement Extended Euclid Algorithm
JUnit5 Programmatic Extension Registration with @RegisterExtension
Convert String to Byte Array and Reverse in Java
Từ khóa this và super trong Java
Introduction to Project Reactor Bus
Java TreeMap vs HashMap
Java Program to Implement Sorted Circularly Singly Linked List