scala – 如何在Play-Mailer中设置JavaMail属性

我想知道如何设置JavaMail属性,如:

mail.mime.address.strict

Play-Mailer插件.

最佳答案
不是直接答案,但它确实显示了如何设置原始javax.mail的属性.这种方法很简单,因为您不需要Play插件来解决这个问题,而且我总是选择简单和尽可能少的基础设施.

首先将它包含在build.sbt中

"javax.mail" % "mail" % "1.4.5"

然后你走了……

import javax.mail._
import javax.mail.internet._

使用标准的Play配置系统来获取您需要的任何参数

private val host = config.getOptional[String]("smtp.host").getOrElse("localhost")
private val port = config.getOptional[String]("smtp.port").getOrElse("25")
private val account = config.getOptional[String]("smtp.account").getOrElse("not configured")

从配置中提取后,设置邮件属性…

val props = System.getProperties
props.setProperty("mail.smtp.host", host)
props.setProperty("mail.smtp.port", port)
props.setProperty("mail.smtp.auth", "true")
props.setProperty("mail.smtp.starttls.enable", "true")

设置你的身份……

val auth = new Authenticator() {
  override def getPasswordAuthentication: PasswordAuthentication = {
    new PasswordAuthentication(account, passwd)
  }
}

并发送您的消息

def send(toAddress: String, subject: String, htmlBody: String): Unit = {
  val session = Session.getInstance(props, auth)
  val msg = new MimeMessage(session)
  msg.setFrom(new InternetAddress(account, "Someone"))
  msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress))
  msg.setSubject(subject)
  msg.setSentDate(new Date())
  val multiPart = new MimeMultipart("related")
  val htmlBodyPart = new MimeBodyPart()
  htmlBodyPart.setContent(htmlBody, "text/html")
  multiPart.addBodyPart(htmlBodyPart)
  msg.setContent(multiPart)
  Logger.info(s"Sending '$subject' to $toAddress")
  Transport.send(msg)
}

应该这样做.你可能应该将整个东西包装在一个Try monad中,因为这会抛出异常.此外,如果您需要发送附件,它已经是一个多部分消息,您只需添加更多部分到html消息.

转载注明原文:scala – 如何在Play-Mailer中设置JavaMail属性 - 代码日志