Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从本地主机发送电子邮件-播放框架_Java_Email_Smtp_Playframework - Fatal编程技术网

Java 从本地主机发送电子邮件-播放框架

Java 从本地主机发送电子邮件-播放框架,java,email,smtp,playframework,Java,Email,Smtp,Playframework,有人知道在本地主机上发送电子邮件的Play Framework项目的application.conf文件中需要应用的smtp设置吗 在单元测试过程中,我遇到了以下错误: 已捕获play.exceptions.MailException,无法发送电子邮件 游戏中的开发者让发送电子邮件变得如此简单,我唯一可能搞砸的方法就是修改配置文件中的设置 我试过使用: mail.smtp=mock 我试着注释上面的一行,并使用: mail.smtp.host=127.0.0.1 这两种方法都不起作用。我知道

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

在单元测试过程中,我遇到了以下错误:

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

游戏中的开发者让发送电子邮件变得如此简单,我唯一可能搞砸的方法就是修改配置文件中的设置

我试过使用:

mail.smtp=mock
我试着注释上面的一行,并使用:

mail.smtp.host=127.0.0.1
这两种方法都不起作用。我知道这可能是一个很难回答的问题,但我以前从未真正处理过设置电子邮件的问题,所以我非常感谢能提供的任何帮助

如果我无法发送电子邮件,因为Play不能作为SMTP服务器工作,那么我是否可以使用
mail.SMTP=mock
来“模拟发送”电子邮件并允许我的测试通过

有用链接


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

mail.debug=true
然而,出于测试目的,我发现使用GMail是发送电子邮件最简单的方法。 配置(同样在application.conf中)是

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

我使用1.2.4。(还没有移植…)

play.mvc.Mailer.send()可能失败的原因有很多,但是如果查看引发的异常的第一级,则会发现真正的原因被抑制,因为引发的异常是(play.mvc.Mailer.java:349):

play.exceptions.MailException继承自java.lang.RuntimeException。真正的异常,例如,被设置为原因

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

try {
    Future<Boolean> future = play.mvc.Mailer.send(...);
} catch(MailException me) {
    System.out.println(me.getCause().getMessage());
}
试试看{
Future=play.mvc.Mailer.send(…);
}捕获(邮件例外){
System.out.println(me.getCause().getMessage());
}

这可能会打印出更有用的内容。

对于未来的开发人员,我在Mac OSX上使用Play2.1,这是我要发送到本地主机的邮件配置

 host=localhost
 port=1025
 user="root@localhost" 
 from="root@localhost"
使用Mac应用商店提供的MockSMTP应用程序

也使用类型安全插件


我希望这能对将来的人有所帮助。

我认为您需要在本地计算机上安装邮件服务器才能接收电子邮件。您可以使用
@example.com
,这样您的邮件就不会被发送到任何地方。@Jared Farrish-谢谢您的建议。我将研究在本地机器上设置邮件服务器(毫无疑问,它会派上用场)。。。但我想看看是否有可能出于测试目的“模拟发送”电子邮件;这只是我的想法,不是。我猜有一种方法可以把你的邮件隐藏起来,或者使用其他截获方法。我也很想知道,但这就是为什么这是一个评论而不是回答+1谢谢-这是一个非常好的解决方法。我想你不知道
mail.smtp=mock
的用途吧?我想这可能是一种“模拟发送”电子邮件的方式。确实如此。Mock只是将电子邮件输出到控制台,而不是通过SMTP客户端发送。但是,除了在控制台中读取外,您无法看到输出。因此,对于自动化测试而言,这没有帮助,但对于开发人员而言,它表明您的电子邮件生成工作正常,而不会在开发阶段用测试电子邮件淹没您的电子邮件客户端。即使使用gmail,我仍然会收到
无法发送电子邮件
错误。这可能只是一个疲劳的大脑错误,所以我明天会看一看,也许会提出一个新问题。谢谢你的回答!我发现它忽略了“mock”settign,只是在SimpleMail对象上使用您为setHostName提供的任何东西。我很想让mock smtp真正工作起来,没关系,我已经修好了。我是在SimpleEmail对象本身上调用.send()消息,而不是导入play.libs.mail并执行mail.send(email)。Mock SMTP现在很受欢迎。
try {
    Future<Boolean> future = play.mvc.Mailer.send(...);
} catch(MailException me) {
    System.out.println(me.getCause().getMessage());
}
 host=localhost
 port=1025
 user="root@localhost" 
 from="root@localhost"