你可以创建自己的虚拟实现的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')
}
}
谢谢您的建议!我测试了你的代码,它抛出了一个异常,声明'没有方法的签名:my.package.CallPrinter.to()'。当我将'invokeMethod'重命名为'methodMissing'时,它就起作用了。我不是groovy的元编程大师,所以我不能说哪种方法是正确的。唯一缺少的就是渲染模板,我需要在前面提到的确认链接上点击。如果任何人有另一个建议,我将再开放一段时间。 – msung
@msung我已经添加了渲染正文模板的可能选项。 –