実はJava EEに含まれるJavaMailについて

  • 6
    いいね
  • 2
    コメント

この記事は「Java EE Advent Calendar 2016」の24日目です。

昨日は@gishi_yamaさんの「折角なので Apache Wicket 8 についてまとめておきたい」でした。
明日の最終日は@kokuzawaさんです。

JavaMail

自分は長らく開発系部門にいて、ここ数年はずっとJava EEを仕事で利用してきました1。そして今年の10月、クラウド型メール配信サービスであるSendGridチームへ異動しまして、今はメールの世界の奥深さを学ぶ日々となっています。

Javaの世界でメール、といえば、JavaMailが浮かぶと思います。このJavaMail、今更ながらに調べてみると色々面白くて、今日はJavaMailについて書きたいと思います。

Java EEとJavaMail

「ちょっと待って、Java EEアドベントなのに、なんでJavaMail?」という声もあるかと思いますが、実はJavaMailはJava EEの仕様に含まれます2。以下はOracleのJava EEページですが、JSR 919のJavaMailが入っています。

JavaEEAdvent1.png

参照実装であるGlassFishにもバンドルされていて、管理コンソールにも「JavaMail Sessions」という設定があります。
JavaEEAdvent2.png

この辺りの使い方については、以下記事が詳しいです。

JSR 919

JSRの一覧をみると、メールに関連しそうなものとしては3つぐらいでした。JavaMailは現在JSR 919で仕様が公開されています。

JSR 名称 説明 状態
JSR 332 Email Client API for Java ME Java MEアプリからメールを利用するためのAPI Dormant
JSR 904 JavaMail Specification JavaMail APIのMaintenance revision 1.2 Maintenance
JSR 919 JavaMail JavaMail API Maintenance

JSRの900番台って少し特殊な感じなのですかね。JSR 904のDownload Pageはリンク切れしてて中身が確認できなかったのですが3…JSR 919で包含している感じなのかな。

なお、JavaMailのスペックリードはOracleのWilliam Shannon4さんという方です(JSR上はそう記載されているのですが、Bill Shannonさんのことじゃないのかなと)。

JSR 919のドキュメント内にある謝辞では、Sun Microsystems、Novell, Inc、Lotus Development Corporation、IBM Corporation、Netscape Communications Corporationに所属された方々の名前が入っていて歴史を感じます。

JSR 919は156ページあって、それなりにボリュームがあります。

個人的には、なんでJava EEの仕様に含まれたんだろう、と気になったのですが、JSRの冒頭では「Javaプラットフォームでは、RMIやCORBAなどの分散コンピューティング、JavaBeansのようなコンポーネントアーキテクチャなどを機能的に追加しており、Javaアプリも成熟して、メールやメッセージングのような枠組みも必要となった。」という一文があって、なるほどという感じでした。

JSR 919の中で「RFC」で検索したら、出てきたのは主に2つでした。

後者はRFC2046,RFC2047も触れられています。JavaMailでは抽象クラスで定義されているMessage、それを継承したMimeMessageクラスを利用するので、この辺りと関連しているのかなと。

ソースをみていると他にも

などがOAuth2SaslClientクラスで出てきます。GmailのドキュメントとかにあるThe SASL XOAUTH2 Mechanismなどで使うのか…この辺は勉強しないと全然わからない感じ。

ソースではその他にも多くのRFCと関連5した記述があり、様々なプロトコルやメッセージ形式に対応してるようです。

もちろんIMAPPOP3SMTP辺りはソースのパッケージ名にもなっているくらいコアな部分です。

JavaMail 1.5

JavaMailの最新は、これを書いている2016/12/24時点で1.5.6です。ライセンスはCommon Development and Distribution License (CDDL) v1.1 & GNU General Public License (GPL) v2。

JavaMail API Reference Implementation: Wiki: Home」に色々と情報がまとまっています。Android用のJavaMail for Androidなどもあるんですね。

ソースコードは以下から取得できます。
https://java.net/projects/javamail/downloads

日本語情報だと少し古いものが多く、1.5の情報では「JavaMail 1.5を使ってみる」がありました。

JSR919にはライブラリのアーキテクチャとかデザインについて色々書いてありそうなので、本当はもう少しJavaMailのコードを読みつつ色々書きたかったのですが、ちゃんとまとめようとするとヘビーそうだったのでこのぐらいに…。



  1. 開発を通じて学んだことはブログにまとめています:point_right_tone2:Challenge Java EE !」。 

  2. 知ってる方からすれば「常識でしょ」って感じかもですが、私は最近まで知らなかったです… 。 

  3. そんなことってあるのか… 

  4. ググってもBill Shannonさんばかりがでて、調べてたら「William が Bill になる不思議」というページをみたりしたので 

  5. ざっと調べただけでもRFC1320、RFC1730、RFC2060、RFC2086、RFC2087、RFC2177、RFC2359、RFC2060、RFC2595、RFC2971、RFC3501、RFC3691、RFC4422、RFC4551、RFC4959、RFC5032、RFC5162、RFC5256など 

この投稿は Java EE Advent Calendar 201624日目の記事です。