【问题标题】:Sending emails from local host - Play Framework从本地主机发送电子邮件 - Play Framework
【发布时间】:2011-10-31 18:05:19
【问题描述】:

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

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

一个 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

【问题讨论】:

  • 我认为您需要在本地计算机上设置邮件服务器才能接受电子邮件。你可以使用@example.com,这样你的邮件就不会去任何地方。
  • @Jared Farrish - 感谢您的建议。我会考虑在我的本地机器上设置一个邮件服务器(它无疑会派上用场)......但我想看看是否可以“模拟发送”电子邮件以用于测试目的。
  • 如果我确定这是不可能的,我会发布一个答案;这只是我的想法,它不是。我的猜测是有办法黑洞你的电子邮件,或使用其他一些拦截方法。我也想知道,但这就是为什么它是评论而不是答案。 :)

标签: java email smtp playframework


【解决方案1】:

为了更好地诊断问题,您可以使用以下设置(在 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 谢谢 - 这是一个非常好的解决方法。我想你不知道mail.smtp=mock 的用途吗?我认为这可能是一种“模拟发送”电子邮件的方式。
  • 是的。 Mock 只是将电子邮件输出到控制台,而不是将其发送到 SMTP 客户端。但是,除了在控制台中读取它之外,您不会看到输出。因此,对于自动化测试目的,它没有帮助,但对于开发目的,它表明您的电子邮件生成正在工作,而不会在开发阶段用测试电子邮件淹没您的电子邮件客户端。
  • 好的,在这种情况下,肯定是我的代码有问题。即使我使用 gmail,我仍然会收到 cannot send email 错误。这很可能只是一个疲惫的大脑错误,所以我明天再看看,也许会提出一个新问题。感谢您的回答!
  • 我发现它无论如何都忽略了“模拟”设置,只是使用您在 SimpleEmail 对象上为 setHostName 提供的任何内容来破解。我希望模拟 smtp 能够实际工作
  • 好吧,没关系,我修好了。我在 simplemail 对象本身上调用 .send() 消息,而不是导入 play.libs.mail 并执行 Mail.send(email)。模拟 SMTP 现在是一种享受。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    使用 Mac 商店提供的 MockSMTP 应用程序http://mocksmtpapp.com/

    同样使用类型安全插件

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 2013-04-16
      • 2014-10-25
      • 2013-10-01
      • 2010-12-19
      • 2014-01-10
      相关资源
      最近更新 更多