Java 无法从Play framework发送电子邮件
我正在尝试使用Play框架发送电子邮件。在applications.conf中,当我设置smtp.mock=true时,它工作得非常好:Java 无法从Play framework发送电子邮件,java,playframework,jakarta-mail,playframework-2.2,Java,Playframework,Jakarta Mail,Playframework 2.2,我正在尝试使用Play框架发送电子邮件。在applications.conf中,当我设置smtp.mock=true时,它工作得非常好: [info] application - HTML: Welcome to Play20StartApp. <br> Click on this link : http://localhost:9000/confirm/d77ea256-0d2e-4df5-b66e-e034159f8042 to confirm your email.<br
[info] application - HTML: Welcome to Play20StartApp. <br> Click on this link : http://localhost:9000/confirm/d77ea256-0d2e-4df5-b66e-e034159f8042 to confirm your email.<br><br>--<br>null
[debug] application - Mail sent - SMTP:smtp.google.com:465 SSL:yes user:username@gmail.com password:password
我已将smtp.user设置为正确的值,即。server@businessdomain.com . 知道是什么导致了这个错误吗
故障排除步骤
如果您在将来包装mailer操作(或使用Java等效工具),那么您可能会遇到一个变量范围问题: 这项工作:
val mail = use[MailerPlugin].email
val async: Future[Unit] = Future{
mail.setSubject(subject)
mail.setRecipient(recipient)
mail.setFrom(from)
mail.send(body)
}
async.onFailure{case(e)=>
Logger.error(s"mailer failed for $recipient due to: ${e.getMessage}")
}
这不起作用:
我假设封闭范围在未来的封闭期内可用;在本例中,肯定不是这样,因为底层Apache Commons邮件程序使用“From address required”进行bail。果然,设置smtp.mock=true表明,当mail.setFrom和friends在将来的{…}范围之外填充时,fromAddress为null
有趣的是,即使我将async val分解为一个本地方法,并传入构造的mailer和body文本:
private def async(mail: MailerAPI, body: String): Future[Unit] = Future{
mail.send(body)
}
在未来之外设置的邮件属性仍然是空的,尽管直接传递了一个构造的邮件器——令人惊讶的是,没有?我对Play框架一无所知;它不是使用您上面发布的(工作)Java代码吗?您实际上是在电子邮件中设置发件人地址,还是仅设置要进行身份验证的SMTP用户名?不,它没有使用Java代码。我将该Java代码与确切的电子邮件配置(从、到smtp服务器)一起使用,只是为了确保问题不在于smtp/传输位。i、 e.plainjavax.mail是有效的。当我尝试从Play Framework发送电子邮件时,它失败了,并抱怨表单地址无效。然后我猜您需要告诉Play Framework设置发件人地址,但只告诉SMTP用户。@BillShannon这是正确的。这就是我在application.conf文件smtp.host=smtp.google.com smtp.port=465 smtp.from=“my”中所做的。email@gmail.com“那没用。看来你需要一个游戏框架专家。试着在网上发帖。
val mail = use[MailerPlugin].email
val async: Future[Unit] = Future{
mail.setSubject(subject)
mail.setRecipient(recipient)
mail.setFrom(from)
mail.send(body)
}
async.onFailure{case(e)=>
Logger.error(s"mailer failed for $recipient due to: ${e.getMessage}")
}
val mail = use[MailerPlugin].email
mail.setSubject(subject)
mail.setRecipient(recipient)
mail.setFrom(from)
val async: Future[Unit] = Future{mail.send(body)}
async.onFailure{case(e)=>
Logger.error(s"mailer failed for $recipient due to: ${e.getMessage}")
}
private def async(mail: MailerAPI, body: String): Future[Unit] = Future{
mail.send(body)
}