Grails邮件插件传递到控制台/登录开发模式

时间:2013-05-30 08:26:36

标签: email grails configuration grails-plugin

我正在使用带有mail plugin的Grails。在开发模式中,我希望我的应用程序发送的邮件被呈现(以捕获模板中的错误),但打印到控制台。

我找到的唯一选择是

grails.mail.disabled=true

但是,根据documentation

  

这会将对mailService.sendMail()的任何调用视为无操作

这不是我想要的,因为我希望开发人员能够点击我们的确认链接(我需要邮件输出)。

有没有一种方法可以将邮件“传递”到控制台?我知道我可以使用另一个地址覆盖to-field,但在测试时我宁愿不涉及我们的邮件服务器。

2 个答案:

答案 0 :(得分:4)

您可以在mailService中创建自己的src/groovy虚拟实现作为类,然后在grails-app/conf/spring/resources.groovy中添加一些条件代码,以便仅在开发模式下定义虚拟服务。我能想到的最简单的就是

<强>的src /常规/ COM /示例/ DummyMailService.groovy

package com.example
import org.springframework.mail.MailMessage

class DummyMailService {
  MailMessage sendMail(Closure callable) {
    callable.delegate = new CallPrinter()
    callable.call()
    return null
  }
}

class CallPrinter {
  def methodMissing(name, args) {
    println "${name}: ${args}"
  }
}

<强>的grails-app / CONF /弹簧/ resources.groovy

import grails.util.Environment

beans = {
  if(Environment.current == Environment.DEVELOPMENT) {
    mailService(com.example.DummyMailService)
  }
}

显然你可能更聪明,例如使用记录器而不是println,或者根据配置选项而不仅仅是环境切换虚拟服务(这样您以后可以在开发模式下打开邮件时特别想要测试它)。

如果您希望能够处理呈现模板的body(view:'...', model:[:])次调用,则可以使用groovyPageRenderer执行此操作:

class DummyMailService {
  def callPrinter

  MailMessage sendMail(Closure callable) {
    callable.delegate = callPrinter
    callable.call()
    return null
  }
}

class CallPrinter {
  def groovyPageRenderer

  def methodMissing(name, args) {
    println "${name}: ${args}"
  }

  void body(Map params) {
    methodMissing("body", groovyPageRenderer.render(params))
  }
}

并在resources.groovy

mailService(com.example.DummyMailService) {
  callPrinter = { com.example.CallPrinter p ->
    groovyPageRenderer = ref('groovyPageRenderer')
  }
}

答案 1 :(得分:1)

GreenMail插件是我能想到的最接近你想要的插件(参见插件here)。它将在网页中呈现电子邮件(插件提供控制器),不确定是否可以设置Log4j以将电子邮件记录到控制台...

相关问题