Play2.1,2.2のメール送信プラグインを使う(Scala) #Play2
Play Framework 2.1,2.2のScalaベースアプリでメール送信する時に使用するプラグインを試しました。
基本情報は全て参考URLのページから入手可能です。
参考URL
概要
今回は、Typesafe Emailer プラグイン(Typesafe製)と、Scala mailer module for Play 2.x(Rhinofly製)を試しました。
どちらもJavaMailのラッパーのようです。JavaMailに慣れていればそのまま使うのもアリかも知れません。
とは言っても、インストール設定とかapplication.conf
から読み込む機能などを、わざわざ自分で用意する手間を考えると、プラグインを使った方が良いですね。
環境
- Windows, MacOSX
- Windows 8.1 64bit
- MacOSX 10.6.8 (Snow Leopard)
- play 2.1, 2.2
そういえば、今回初めてPlay2.2を使ったのですが、エクスクラメーションマークが無くなってるんですね。ロゴも。
使用例
Play2.1の場合を示します。Play2.2でも試しています。
簡略版でない使用例は、各プラグインのGitHubのREADMEに書かれています。
サンプルプログラムは、次のパラメーターを指定してメールを送信する処理とします。
val fromAddr = ... // 送信者 val toAddr = ... // 受取人 val subject = ... // 件名 val body = ... // 本文(テキスト形式)
Typesafe Emailer プラグイン の例
Scala、Playの本家であるTypesafe製のプラグインです。
- インストール(
project/Build.scala
)
// val appDependencies = Seq( "com.typesafe" %% "play-plugins-mailer" % "2.1.0" // )
- インストール(
conf/play.plugins
)
1500:com.typesafe.plugin.CommonsMailerPlugin
conf/play.plugins
ファイルの記載を忘れて(?)しまい、「動かないんです」という方が結構いらっしゃるようなので、注意しましょう。(Stack Overflowなどでたくさん見つかります。)
- 設定(
conf/application.conf
)
smtp.host=smtp.gmail.com smtp.port=587 smtp.ssl=true smtp.user="(sender account address)" smtp.password="(sender account password)" # smtp.mock=true
SMTPポートは、587番ポート(サブミッションポート)を使います。
また、コメントアウトしているsmtp.mock=true
を有効にすると、MockMailer
を使うことができます。(⇒MailerPlugin.scala#L332)
使い方です。README.mdの内容は古いみたいで、使用例のままでは使えません。
- 簡略版サンプル(Typesafe Emailer プラグイン)
import play.api.Play.current import com.typesafe.plugin._ val mail = use[MailerPlugin].email mail.addFrom(fromAddr) mail.addRecipient(toAddr) mail.setSubject(subject) mail.send(body)
Scala mailer module for Play 2.x の例
オランダの企業Rhinoflyが作ったプラグイン。(ついでにScalaプログラマーも募集しているようです。)
こちらのプラグインは、非同期送信も可能になっています。非同期送信にはAsyncMailer
を使います。
- インストール(
project/Build.scala
)
// val appDependencies = Seq( "play.modules.mailer" %% "play-mailer" % "2.0.1" // ) // val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings( resolvers += "Rhinofly Internal Release Repository" at "http://maven-repository.rhinofly.net:8081/artifactory/libs-release-local" // )
masterリポジトリのREADMEには、"for Play 2.2.x"と書かれていますが、ブランチで切り替えれば古いバージョンの情報を見ることができます。
Play2の各バージョンに対応するプラグインのバージョンは以下の通り。
- 2.0.x => "1.0.2"
- 2.1.x => "2.0.1"
- 2.2.x => "2.1.3"
- SMTP設定(
conf/application.conf
)
mail.failTo="(sender address)" mail.host=smtp.gmail.com mail.port=465 mail.username="(sender account)" mail.password="(sender account password)"
SMTPポートは、465番ポート(SMTP over SSL)を使います。(STARTTLSに対応していない?)
- 簡略版サンプル(Scala mailer module for Play 2.x)
import play.modules.mailer._ import scala.util.{ Try, Success, Failure } val email = Email( from = EmailAddress("sender name", fromAddr), recipients = List(Recipient(RecipientType.TO, EmailAddress("recipient name", toAddr))), subject = subject, text = body, htmlText = body) val result: Try[Unit] = Mailer.sendEmail(email) result match { case Success(_) => {} // success case Failure(ex) => throw ex // failure }
こちらは、送信はできましたが、本文の改行が無視されてしまいました。(確認中)
以上です。