2011-08-21 119 views
4

有人知道需要在Play Framework项目的application.conf文件中应用smtp设置以发送本地主机上的电子邮件吗?从本地主机发送电子邮件 - 播放框架

在我的单元测试,我得到的错误:

A play.exceptions.MailException has been caught, Cannot send email

在游戏开发者已经取得发送电子邮件很容易,我可以搞乱唯一的办法就是用我在配置文件中的设置。

我曾尝试只用:

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

+0

我认为你需要在本地机器上安装邮件服务器才能接受邮件。你可以使用'@ example.com',这样你的邮件就不会去任何地方。 –

+0

@Jared Farrish - 感谢您的建议。我会考虑在本地机器上设置一个邮件服务器(这无疑会派上用场)......但我想看看是否有可能为测试目的“模拟发送”电子邮件。 –

+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 

对于所有配置的全部细节,播放框架上有很多关于如何做到这一点。

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

+0

+1谢谢 - 这是一个非常好的工作。我不认为你知道'mail.smtp = mock'的目的?我认为这可能是'模拟发送'电子邮件的一种方式。 –

+5

是。模拟只是将电子邮件输出到控制台,而不是发送到SMTP客户端。除了在控制台中读取它之外,您不会看到输出。因此,对于自动化测试目的来说,它没有什么帮助,但是对于开发目的而言,它显示了您的电子邮件生成工作正常,而无需在Dev阶段使用测试电子邮件淹没您的电子邮件客户端 – Codemwnci

+0

好吧,在这种情况下,我的代码肯定是错的。即使在使用Gmail时,我仍然会收到'无法发送电子邮件'错误。这可能只是一个疲倦的大脑错误,所以我明天会看看,也许会提出一个新的问题。感谢你的回答! –

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()); 
} 

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