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のほうが好み。