从本地主机发送电子邮件 - Play Framework

时间:2011-08-21 21:02:09

标签: java email smtp playframework

是否有人知道需要在Play Framework项目的smtp文件中应用的application.conf设置才能在localhost上发送电子邮件?

在我的单元测试期间,我收到错误:

  

已捕获play.exceptions.MailException,无法发送电子邮件

Play的开发人员发送电子邮件非常简单,我弄乱的唯一方法就是使用配置文件中的设置。

我尝试过使用:

mail.smtp=mock

我尝试评论上面的一行并使用:

mail.smtp.host=127.0.0.1

这两种方法都不起作用。我知道这可能是一个非常棒的问题,但我以前从未真正处理过设置电子邮件的问题 - 所以我很感激能够提供任何帮助。

如果我无法发送电子邮件,因为Play无法用作SMTP服务器,有什么方法可以使用mail.smtp=mock“模拟发送”电子邮件并允许我的测试通过了吗?

有用的链接

This is a link to the Play documentation for sending emails

3 个答案:

答案 0 :(得分:9)

为了更好地诊断问题,您可以使用以下设置(在application.conf中)提供有关电子邮件发送过程的更多详细信息。

mail.debug=true

但是,出于测试目的,我发现使用GMail是发送电子邮件的最简单方法。 配置(再次在application.conf中)是......

mail.smtp.host=smtp.gmail.com
mail.smtp.user=yourGmailLogin
mail.smtp.pass=yourGmailPassword
mail.smtp.channel=ssl

有关所有配置的完整详细信息,Play Framework页面提供了大量有关如何执行此操作的信息。

http://www.playframework.org/documentation/1.2.2/emails

答案 1 :(得分:1)

我使用1.2.4。 (尚未移植......)

play.mvc.Mailer.send()可能会失败的原因有多种,但是如果你看一下抛出的异常的第一级,那么真正的原因会被抑制,因为抛出的是(play.mvc.Mailer.java :349):

throw new MailException("Cannot send email", ex);

play.exceptions.MailException继承自java.lang.RuntimeException。真正的例外,ex,被设定为原因。

我建议您查看原因字段。例如:

try {
    Future<Boolean> future = play.mvc.Mailer.send(...);
} catch(MailException me) {
    System.out.println(me.getCause().getMessage());
}

这可能会打印出更有用的东西。

答案 2 :(得分:1)

对于未来的开发人员,我在Mac OSX上使用Play2.1,这是我发送给localhost的邮件配置......

 host=localhost
 port=1025
 user="root@localhost" 
 from="root@localhost"

使用Mac商店http://mocksmtpapp.com/

提供的MockSMTP应用程序

还使用typesafe插件

https://github.com/typesafehub/play-plugins/tree/master/mailer

我希望这可以在将来帮助某人。