In Playframework 2.0, non sembra essere semplice inviare e-mail (vedere i commenti su Using sendmail as SMTP server in Play Framework) come ha fatto in Play 1.x. Non c'è funzionalità di mailing out of the box ... quindi, come posso inviare email?Invio di e-mail in Playframework 2.0
risposta
Playframework 2.x richiede un plug-in per Mail per funzionare. Non è stato aggiunto al core perché gli sviluppatori hanno ritenuto che fosse banale far funzionare l'email, quindi ha deciso che era meglio creare un plug-in. Tuttavia, la rapida raffica di messaggi su gruppi di google ha suggerito che si sbagliavano ... la gente si aspettava la stessa funzionalità di Play 1.x.
Come ci si aspetta dalla comunità, è stato rapidamente creato un plug-in. Vedi https://github.com/playframework/play-mailer.
Ci saranno altri plugin da tenere d'occhio, ma questo è il tipo supportato da uno sviluppatore principale, quindi mi aspetto che sia il migliore.
Ho subito un plug-in compromesso con il supporto per gli allegati, perché finora quello menzionato @Codemwnci non ce l'ha. You can check it out.
La risposta accettata è che Play necessita di un plug-in per inviare e-mail. Questo è falso. Puoi facilmente adattare qualsiasi mailing list JVM per la tua app Play. Ecco un esempio utilizzando Apache Commons Email, adattato per semplicità da here e il nostro codice di produzione.
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(...))
Dato che l'invio di e-mail è così banalmente compiuto in gioco, sono i plugin sorpreso sono consigliati a tutti. A seconda di un plug-in può farti male se vuoi aggiornare le versioni di Play, e non ritengo che ne valga la pena qualcosa che richiede 30 LoC per realizzarlo. Il nostro codice ha funzionato l'aggiornamento non modificato da Play 2.0 a 2.1 a 2.2.
Questa lista di plugin per 2.0 è stata utile - si noti che dovrebbe essere temporanea: https://github.com/playframework/Play20/wiki/Modules –
@Codemwnci: sto guardando questo modulo per supporto per gli allegati, ma sembra essere nascosto o inesistente. Suggerimenti? – Samo
Il percorso non è corretto in readme: prova '" com.typesafe "%" play-plugins-mailer_2.9.1 "%" 2.0.4 "'. avviso '_2.9.1'. – Trick