您可以创建自己的虚拟实现mailService
作为一个类,src/groovy
然后放入一些条件代码grails-app/conf/spring/resources.groovy
以仅在开发模式下定义您的虚拟服务。我能想到的最简单的方法是
src/groovy/com/example/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/spring/resources.groovy
import grails.util.Environment
beans = {
if(Environment.current == Environment.DEVELOPMENT) {
mailService(com.example.DummyMailService)
}
}
显然你可以更聪明,例如使用 logger 而不是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')
}
}