TODOフォルダにまとめたメールのSubject一覧が欲しいときがあります。メーラを開いていちいちコピペするのは面倒なのですが、何か良い方法はないでしょうか。
そんなときはIMAPサーバをMaildir形式で動かしておくと何かと便利です。IMAPサーバのあるフォルダへ一覧にしたいメールを放り込んで、プログラムで一覧を取得すればいいのです。まぁ、IMAPサーバでなくてもMaildir形式でメールを保存するメーラを使ってローカルで処理してもいいですね。
プログラムはJavaMailを使います。Maildir形式で保存されるメールはいわゆるemlファイルですから、次のようにして簡単に処理ができます。サンプルではSubject以外も取得して表示していますが、手元ではタイトルだけにして、シェルスクリプトと組み合わせて一覧を取得できるようにしています。こういうことができると、メールと他のシステムとを連携させたりすることが簡単にできるようになりますから、使ってみると楽しいですよ!
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
public class App {
public static void main(String args[]) throws Exception{
if (args.length < 1) {
System.out.println("usage: java -jar JemlReader.jar filename.eml");
System.exit(0);
}
String f = args[0];
display(new File(f));
}
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());
}
}
JavaMailは本家から取得しても良いですし、mavenならpom.xmlへ依存関係を追加するだけです。手元ではquick-startのアプリを作って、pom.xmlをちょっと書き換えただけすぐに使えました。便利ですね。世の中 mavenよりもgradle が優勢になりつつあるようですが…
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.sssg.soft.jemlreader</groupId>
<artifactId>JemlReader</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>JemlReader</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>org.sssg.soft.jemlreader.App</mainClass>
<packageName>org.sssg.soft.jemlreader</packageName>
<addClasspath>true</addClasspath>
<addExtensions>true</addExtensions>
<classpathPrefix>lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- Maven: The Definitive Guide
- Apache Maven 3 Cookbook
- Building and Testing with Gradle
- Gradle in Action
- Gradle Beyond the Basics