Playframework 2.2で非同期メール送信

Playで作っているアプリケーションでメール送信が必要になり、普通に書いてみたらメール送信が遅いので画面に制御が帰ってくるまで時間がかかってしまった。手っ取り早く非同期でメールを送信するように改良してみた。

プロジェクト直下のbuild.sbt

libraryDependenciesに

"play.modules.mailer" %% "play-mailer" % "2.1.3"

を追加。

resolvers ++= Seq(
"Rhinofly Internal Release Repository" at "http://maven-repository.rhinofly.net:8081/artifactory/libs-release-local"
)

を追加。

conf/application.confに

mail.failTo="(sender address)"
mail.host=smtp.gmail.com
mail.port=465
mail.username="foo@coo.bar.com"
mail.password=xxxxxxxx

を追加。

Application.scalaで送信。エラー処理などはまたこんど。

import play.modules.mailer._
import scala.concurrent._
import ExecutionContext.Implicits.global

// 添付ファイルの用意
val bis = new BufferedInputStream(new FileInputStream(pdf))
val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray

val email = Email(
subject = "サブジェクト",
from = EmailAddress("送付者名", "donotreply@coo.bar.com"),
text = body,
htmlText = body)
.to("受信者名", "xxxxx@zoo.co.jp")
.withAttachments(
Attachment(pdf.getName(), bArray, "application/pdf"))
AsyncMailer.sendEmail(email)