るいもの戯れ言

Playframeworkのテンプレートエンジン、Twirlは、XMLも生成できるようだ。通常はXXX.scala.htmlといったファイル名にするが、これをXXX.scala.xmlとすれば良い。

ただ、デフォルトだとXML宣言を書いてくれない。これはWritableを実装してやれば良い。


  val xmlWriteable = new Writeable[Xml](
    xml => ByteString("""<?xml version="1.0" encoding="UTF-8"?>""" + xml.toString, ByteString.UTF_8),
    Some("text/xml")
  )

あとはコントローラで書き出す時に、このWritableを指定してやる。


      Ok(
        views.xml.atom(recs, settings)
      )(xmlWriteable)

コメントを書き込む

Playframework用のメール・プラグインの最新版で、以下のようなエラーでメールが送信できない。


org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:587
        at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)
        at org.apache.commons.mail.Email.send(Email.java:1448)
        at play.api.libs.mailer.SMTPMailer$$anon$2.send(MailerPlugin.scala:100)
        at play.api.libs.mailer.CommonsMailer.send(MailerPlugin.scala:130)
        at play.api.libs.mailer.SMTPMailer.send(MailerPlugin.scala:110)
        at play.api.libs.mailer.SMTPDynamicMailer.send(MailerPlugin.scala:117)
        at controllers.HomeController$$anonfun$postComment$1$$anonfun$apply$7$$anonfun$apply$1.apply$mcV$sp(HomeController.scala:101)
        at akka.actor.Scheduler$$anon$4.run(Scheduler.scala:126)
        at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
        javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2055)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
        at javax.mail.Service.connect(Service.java:386)
        at javax.mail.Service.connect(Service.java:245)
        at javax.mail.Service.connect(Service.java:194)
        at javax.mail.Transport.send0(Transport.java:253)
        at javax.mail.Transport.send(Transport.java:124)
        at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)
        ... 12 more
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
        at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
        at sun.security.ssl.InputRecord.read(InputRecord.java:527)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
        at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:543)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:348)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:215)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2019)
        ... 19 more

設定(application.conf)は、以下のようにしていた(これで以前は送信できていた)。


play.mailer {
  host = "smtp.gmail.com"
  port = 587
  ssl = yes
  user = "Set your gmail account(xxx@gmail.com)"
  password = "Set your gmail password"
#  debug=yes
}

現在のバージョンで、Gmailに送る場合は以下のようにする必要があるようだ(ssl=no, tls=yes)。


play.mailer {
  host = "smtp.gmail.com"
  port = 587
  ssl = no
  tls = yes
  user = "Set your gmail account(xxx@gmail.com)"
  password = "Set your gmail password"
#  debug=yes
}

コメントを書き込む
#1
2017/01/04 07:45

ずっと懸案だった古いjbossサーバを止めるため、年末の休みはブログ・サーバを作成。とにかく最低限の機能しかないけど、Angular + Playframeworkで作成。本当は1/3中になんとかしたかったけど間に合わなかった...

足りないコンテンツは、少しずつ移行して、1月中にはjbossを止めたいな。

コメントを書き込む
1 / 5