从本地主机发送电子邮件 - 播放框架
有人知道需要在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
'模拟发送'电子邮件并允许我的测试通过?
有用的链接
为了更好地诊断问题,您可以使用下面的设置(在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
对于所有配置的全部细节,播放框架上有很多关于如何做到这一点。
+1谢谢 - 这是一个非常好的工作。我不认为你知道'mail.smtp = mock'的目的?我认为这可能是'模拟发送'电子邮件的一种方式。 –
是。模拟只是将电子邮件输出到控制台,而不是发送到SMTP客户端。除了在控制台中读取它之外,您不会看到输出。因此,对于自动化测试目的来说,它没有什么帮助,但是对于开发目的而言,它显示了您的电子邮件生成工作正常,而无需在Dev阶段使用测试电子邮件淹没您的电子邮件客户端 – Codemwnci
好吧,在这种情况下,我的代码肯定是错的。即使在使用Gmail时,我仍然会收到'无法发送电子邮件'错误。这可能只是一个疲倦的大脑错误,所以我明天会看看,也许会提出一个新的问题。感谢你的回答! –
我使用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());
}
这可能会打印出更有用的东西。
对于未来的开发者,我在Mac OSX上使用Play2.1,这是我的邮件配置发送到本地主机...
host=localhost
port=1025
user="[email protected]"
from="[email protected]"
使用同样使用类型安全插件
https://github.com/typesafehub/play-plugins/tree/master/mailer
我希望这可以帮助别人,将来可在苹果商店http://mocksmtpapp.com/
MockSMTP应用。
我认为你需要在本地机器上安装邮件服务器才能接受邮件。你可以使用'@ example.com',这样你的邮件就不会去任何地方。 –
@Jared Farrish - 感谢您的建议。我会考虑在本地机器上设置一个邮件服务器(这无疑会派上用场)......但我想看看是否有可能为测试目的“模拟发送”电子邮件。 –
如果我确实知道这是不可能的,我会发布一个答案;这只是我认为它不是。我的猜测是有一种方法可以打破你的电子邮件,或使用其他拦截方法。我也想知道,但这就是为什么它是一个评论,而不是一个答案。 :) –