Подтвердить что ты не робот

Отправка писем в Playframework 2.0

В Playframework 2.0 не так просто отправлять электронные письма (см. комментарии к Использование sendmail в качестве SMTP-сервера в Play Framework), как это было в Play 1.х. Нет никакой функции почтовой рассылки... так, как я могу отправить электронные письма?

4b9b3361

Ответ 1

Playframework 2.x требует плагина для работы Mail. Это не было добавлено к ядру, потому что разработчики считали, что тривиально получать электронную почту, поэтому решили, что лучше создать плагин. Однако быстрое распространение сообщений в группах google показало, что они ошибались... люди ожидали тех же функций, что и в Play 1.x.

Как вы ожидаете от сообщества, плагин был быстро построен. См. https://github.com/playframework/play-mailer.

Там также будет больше плагинов, но это будет поддержка типов, поддерживаемая одним из основных разработчиков, поэтому я ожидаю, что это будет лучше всего поддерживать.

Ответ 2

Принятый ответ: Play необходим плагин для отправки электронной почты. Это неверно. Вы можете легко адаптировать любую почтовую библиотеку JVM для своего приложения Play. Вот пример использования Apache Commons Email, адаптированный для простоты здесь и нашего собственного производственного кода.

import org.apache.commons.mail._
import scala.util.Try

private val emailHost = Play.configuration.getString("email.host").get

/**
 *  Sends an email
 *  @return Whether sending the email was a success
 */
def sendMail(from: (String, String), // (email -> name)
             to: Seq[String],
             cc: Seq[String] = Seq.empty,
             bcc: Seq[String] = Seq.empty,
             subject: String,
             message: String,
             richMessage: Option[String] = None,
             attachment: Option[java.io.File] = None) = {

  val commonsMail: Email = if(mail.attachment.isDefined) {
      val attachment = new EmailAttachment()
      attachment.setPath(mail.attachment.get.getAbsolutePath)
      attachment.setDisposition(EmailAttachment.ATTACHMENT)
      attachment.setName("screenshot.png")
      new MultiPartEmail().attach(attachment).setMsg(mail.message)
    } else if(mail.richMessage.isDefined) {
      new HtmlEmail().setHtmlMsg(mail.richMessage.get).setTextMsg(mail.message)
    } else {
      new SimpleEmail().setMsg(mail.message)
    }
  }

  commonsMail.setHostName(emailHost)

  to.foreach(commonsMail.addTo(_))
  cc.foreach(commonsMail.addCc(_))
  bcc.foreach(commonsMail.addBcc(_))

  val preparedMail = commonsMail.
    setFrom(mail.from._2, mail.from._1).
    setSubject(mail.subject)

  // Send the email and check for exceptions
  Try(preparedMail.send).isSuccess
}

def sendMailAsync(...) = Future(sendMail(...))

Учитывая, что отправка по электронной почте так тривиально выполнена в Play, я удивлен, что плагины рекомендуются вообще. В зависимости от того, какой плагин может повредить вам, если вы хотите обновить версии Play, и я не чувствую, что что-то, что занимает 30 LoC, чтобы выполнить сами, того стоит. Наш код работал немодифицированное обновление с Play 2.0 до 2.1 до 2.2.

Ответ 3

Я быстро взломал плагин с поддержкой вложений, потому что до сих пор у упомянутого @Codemwnci его нет. Вы можете проверить это.

Ответ 4

На самом деле плагин может создать проблему, когда вы обновите свою игровую версию. Любая библиотека рассылки JVM лучше и безопаснее для игры.

Ответ 5

Плагин может создать проблему при обновлении. Любая библиотека рассылки JVM лучше и безопаснее для игры.