Cod*_*nci 22 playframework playframework-2.0
在Playframework 2.0中,发送电子邮件似乎并不那么简单(请参阅Play 1.x中有关在Play Framework中使用sendmail作为SMTP服务器的评论).没有开箱即用的邮件程序功能......所以,我该如何发送电子邮件?
Cod*_*nci 29
Playframework 2.x需要一个Mail插件才能工作.它没有被添加到核心,因为开发人员觉得让电子邮件工作变得微不足道,所以决定创建一个插件更好.然而,谷歌群体上的快速消息表明他们弄错了......人们期望与Play 1.x具有相同的功能.
正如您对社区的期望,一个插件很快就建成了.请参阅https://github.com/playframework/play-mailer.
还有更多的插件需要注意,但这是核心开发人员支持的类型安全,所以我希望它是最好的维护.
DCK*_*ing 15
接受的答案是Play需要一个插件来发送电子邮件.这是错误的.您可以轻松地为您的Play应用调整任何JVM邮件库.这是一个使用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(...))
Run Code Online (Sandbox Code Playgroud)
鉴于电子邮件发送在Play中非常简单,我很惊讶插件是值得推荐的.如果你想要升级Play版本,根据插件可能会伤害你,而且我觉得需要30 LoC来完成自己的事情是值得的.我们的代码已经从Play 2.0到2.1到2.2进行了未经修改的升级.
| 归档时间: |
|
| 查看次数: |
16946 次 |
| 最近记录: |