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).toArrayval 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)