在Playframework 2.0中,發送電子郵件似乎並不像在Play 1.x中那樣簡單(請參閱關於Using sendmail as SMTP server in Play Framework的評論)。沒有開箱即用的郵件功能......所以,我該如何發送電子郵件?在Playframework 2.0中發送電子郵件
21
A
回答
29
Playframework 2.x需要一個用於Mail工作的插件。它並沒有被添加到核心,因爲開發人員認爲讓電子郵件工作變得微不足道,所以決定創建一個插件更好。然而,谷歌羣組上的短消息表明他們錯了......人們期望Play 1.x具有相同的功能。
正如你從社區期待的那樣,一個插件很快就建成了。見https://github.com/playframework/play-mailer。
還會有更多的插件需要注意,但這是由核心開發人員提供的類型安全支持,所以我期望它能得到最好的維護。
2
我很快攻擊了附件支持的插件,因爲到目前爲止提到的@Codemwnci沒有它。 You can check it out。
14
接受的答案是Play需要一個插件來發送電子郵件。這是錯誤的。您可以輕鬆地爲您的Play應用程序調整任何JVM郵件庫。以下是使用Apache Commons Email的一個示例,其簡單適用於here和我們自己的生產代碼。
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,未經修改升級。
相關問題
- 1. CakePHP 2.0發送電子郵件錯誤
- 2. 從Flash/Actionscript 2.0發送電子郵件
- 3. 如何在CakePHP 2.0中發送帶附件的電子郵件?
- 4. PHP發送電子郵件多次發送電子郵件
- 5. 發送電子郵件操作不發送電子郵件
- 6. 使用play 2.0在電子郵件正文中發送URL
- 7. 在播放2.0中發送電子郵件異常
- 8. 在電子郵件上發送異常或在Phonegap上發送電子郵件
- 9. 確定電子郵件發件人併發送電子郵件
- 10. ASP.NET發送電子郵件
- 11. Codeigniter - 發送電子郵件
- 12. Django發送電子郵件
- 13. 發送電子郵件
- 14. 發送電子郵件Godaddy
- 15. PHP發送電子郵件
- 16. 發送電子郵件
- 17. VB.Net電子郵件發送
- 18. WCS電子郵件發送
- 19. IIS7 - 發送電子郵件
- 20. 發送電子郵件proble
- 21. 發送電子郵件
- 22. aspx:發送電子郵件
- 23. 發送電子郵件
- 24. 發送電子郵件?
- 25. 笨 - 發送電子郵件
- 26. PHP發送電子郵件
- 27. 發送電子郵件nodemailer
- 28. 發送電子郵件
- 29. 發送電子郵件C#
- 30. MFMailComposeViewController發送電子郵件
2.0這個插件列表很方便 - 注意它應該是臨時的:https://github.com/playframework/Play20/wiki/Modules –
@Codemwnci:我正在瀏覽這個模塊依戀支持,但似乎是隱藏或不存在。提示? – Samo
路徑在自述文件中出錯 - 嘗試'「com.typesafe」%「play-plugins-mailer_2.9.1」%「2.0.4」'。注意'_2.9.1'。 – Trick