Scalaでメール送りたくなってメールライブラリを探したのでまとめておく。
2019年になぜメールか
アプリのプッシュ通知やLINE@などの通知手段が普及した2019年でも、保存性やエビデンス、長文の書きやすさ、所有の証明といったの観点でメールという手段も無視出来ない。
探し方
以前テンプレートエンジンを探したときと観点は同じ。
githubでそれっぽいキーワードで探して、
- そこそこstarがついている (= みんなに使われている)
- 定期的に新バージョンがリリースされている
- contributorが一人じゃない
辺りの観点で、良さげなやつを見つける。
見つけたもの
ScalaにはEmail系のAPIは用意されてないっぽいので、Java用のライブラリを使う感じになる。軽く探して見つかったのは Apache Commons Email と Simple Java Mail の2つ。どちらもJava Mail APIのwrapperで、低レイヤー特有の難しい表現が減っていて使いやすそう。
1. Apache Commons Email
こんな感じに使うっぽい
val email = new SimpleEmail();
email.setHostName("smtp.googlemail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("user@gmail.com");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("foo@bar.com");
email.send();
Java感が強いな
特徴
- HTML, TEXTメール両方対応
- Apacheが出してるので安心感がある
- Simple Java Mailよりもcontributor多い
- SimpleEmailオブジェクトに送信設定とかメールそのものをガバっと持たせるスタイル
- Apache-2.0ライセンス
2. Simple Java Mail
こんな感じに使うっぽい
val email = EmailBuilder.startingBlank()
.to("lollypop", "lolly.pop@somemail.com")
.withSubject("hey")
.withPlainText("Please view this email in a modern email client!")
.buildEmail();
val mailer = MailerBuilder
.withSMTPServer("smtp.host.com", 587, "user@host.com", "password")
.withTransportStrategy(TransportStrategy.SMTP_TLS)
.buildMailer();
mailer.sendMail(email);
特徴
- HTML, TEXTメール両方対応
- Apache Commons EmailよりもStarが多い
- ドキュメントが読みやすい印象
- MailerとEmailオブジェクトで別れていて、MailerへEmailを渡すスタイル
- Apache-2.0ライセンス
個人的には、送信関連の設定はMailerに、emailそのものの関心はEmailに持たせるという関心の分離が出来ているSimple Java Mailのほうが好み。