モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

Scalaで使えそうなメールライブラリの調査

Scalaでメール送りたくなってメールライブラリを探したのでまとめておく。

2019年になぜメールか

アプリのプッシュ通知やLINE@などの通知手段が普及した2019年でも、保存性やエビデンス、長文の書きやすさ、所有の証明といったの観点でメールという手段も無視出来ない。

探し方

以前テンプレートエンジンを探したときと観点は同じ。

blog.pinkumohikan.com

githubでそれっぽいキーワードで探して、

  • そこそこstarがついている (= みんなに使われている)
  • 定期的に新バージョンがリリースされている
  • contributorが一人じゃない

辺りの観点で、良さげなやつを見つける。

見つけたもの

ScalaにはEmail系のAPIは用意されてないっぽいので、Java用のライブラリを使う感じになる。軽く探して見つかったのは Apache Commons EmailSimple Java Mail の2つ。どちらもJava Mail APIのwrapperで、低レイヤー特有の難しい表現が減っていて使いやすそう。

1. Apache Commons Email

github.com

commons.apache.org

こんな感じに使うっぽい

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

github.com

www.simplejavamail.org

こんな感じに使うっぽい

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