En Playframework 2.0, no parece ser tan simple para enviar correos electrónicos (ver comentarios en Uso de sendmail como servidor SMTP en Juego en el Marco de) como lo hizo en el Juego 1.x. No hay fuera de la caja mailer funcionalidad… así que, ¿cómo puedo enviar mensajes de correo?

InformationsquelleAutor Codemwnci | 2012-05-08

3 Comentarios

  1. 29

    Playframework 2.x requiere un plugin para el Correo de trabajo. No fue agregar a la base, ya que los desarrolladores sentía que era trivial para obtener el Correo electrónico de trabajo, por lo que decidió que era mejor crear un plugin. Sin embargo, la rápida ráfaga de mensajes en los grupos de google sugirió que se equivocaron…la gente esperaba la misma funcionalidad que Jugar 1.x.

    Como se puede esperar de la comunidad, sin embargo, un plugin fue construido rápidamente. Ver https://github.com/playframework/play-mailer.

    Habrá más plugins para mirar hacia fuera para así, pero esta es la typesafe apoyado por un desarrollador del núcleo, por lo que espero que sea el mejor mantenido.

    • Esta lista de plugins para 2.0 ha sido útil–tenga en cuenta que se supone que debe ser temporal: github.com/playframework/Play20/wiki/Modules
    • Estoy buscando a través de este módulo para el soporte de fijación, pero parece ser escondido o inexistente. Consejos?
    • Ruta está mal en el readme – trate de "com.typesafe" % "play-plugins-mailer_2.9.1" % "2.0.4". aviso _2.9.1.
    • Si usted está utilizando el Juego! 2.1, el uso de esta dependencia: «com.typesafe» %% «play-plugins-mailer» % «2.1.0»
    • Gracias por la respuesta!
    • ¿cuál es la dependencia para 2.2.6? Gracias

  2. 15

    Aceptado la respuesta es que el Juego necesita un plugin para enviar e-mails. Esto es falso. Se puede adaptar fácilmente a cualquier JVM de correo de la biblioteca para su Juego de la aplicación. He aquí un ejemplo de uso de Apache Commons Correo electrónico, adaptado para la simplicidad de aquí y nuestro propio código de la producción.

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

    Dado que el envío de correo electrónico es tan trivialmente logrado en el Juego, me sorprende que los plugins son del todo recomendable. Según un plugin puede hacerle daño a usted si usted desea actualizar el Juego de las versiones, y no me siento algo que lleva 30 LoC para lograr ti vale la pena. Nuestro código ha trabajado sin modificar la actualización del Juego de la 2.0 a la 2.1 a la 2.2.

    • Agradezco su respuesta!

Dejar respuesta

Please enter your comment!
Please enter your name here