あたしは成熟を目指す

プログラミング、思索、読書などの遍歴をとりとめもなく

JavaMailのドキュメントを読む

ドメインのメールの引っ越しを支援するユーティリティとWebアプリを書くために、JavaMailのドキュメントを読んでいる。そのメモなど。

JavaMail API documentation

おいらがJavaMailを使ったのは、ずいぶん前のことだ。

メールを受信して、自動返信する仕組みを求められ、JavaMailでSMTPサーバを立てた記憶がある。当時、JavaMailの開発は停滞していたような印象だったが、今日は再び勢いを得ているように思える。

  • JavaMail 1.3: 2002年4月リリース
  • JavaMail 1.4: 2005年8月リリース
  • JavaMail 1.5: 2013年2月リリース
  • JavaMail 1.6: 2017年7月リリース

メール送信コードのサンプルは、SMTPを知っている者にとっては、きわめて素直なものに見える。

Properties props = new Properties();
props.put("mail.smtp.host", "my-mail-server");
Session session = Session.getInstance(props, null);

try {
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom("me@example.com");
    msg.setRecipients(Message.RecipientType.TO, "you@example.com");
    msg.setSubject("JavaMail hello world example");
    msg.setSentDate(new Date());
    msg.setText("Hello, world!\n");
    Transport.send(msg, "me@example.com", "my-password");
} catch (MessagingException mex) {
    System.out.println("send failed, exception: " + mex);
}

 プロパティに設定できる項目は色々あるが、順当なものばかりなので、必要になったときに掘り下げれば良いだろう。

javax.mail以下のパッケージはJSRに準拠した標準ライブラリの位置付けであり、com.sun.mail以下のパッケージはリファレンス実装(RI)との位置付けであるらしい。

ここで私に必要なのは、あるIPアドレスから送信されてきたメールが、SPF/DKIM的に正当であるかどうかのチェック、ならびに利用者がSMTP AUTHを用いて自発的に返信を行なったかどうかの記録を確認することであり、また、あるメールボックスに届いたメールを評価して、必要ならば新しいメールアドレスを案内するメールを返信し、届いたメール自体は新しいメールアドレスに転送すること、迷惑メールであるなら無視して隔離すること、判断に迷う場合には一応隔離しつつ、隔離メールを参照するためのWebアプリへのURLをメールしたいのである。

そのためには、SPF/DKIMまわりのAPIの確認から進めていきたい。また、メールヘッダのParserも欲しいところである。