你可以創建自己的虛擬實現的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我已經添加了渲染正文模板的可能選項。 –