Grails mail plugin delivery to console / log in development mode
我正在使用带有邮件插件的 Grails。在开发模式下,我希望我的应用程序发送的邮件被渲染(以捕获模板中的错误)但打印到控制台。
我找到的唯一选择是
1 | grails.mail.disabled=true |
但是,根据文档:
this will treat any call to mailService.sendMail() as a no-op
这不是我想要的,因为我希望开发人员能够点击我们的确认链接(为此我需要邮件输出)。
有没有一种很好的方法可以将邮件"传递"到控制台?我知道我可以用另一个地址覆盖收件人字段,但我宁愿在测试时不涉及我们的邮件服务器。
您可以在
src/groovy/com/example/DummyMailService.groovy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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
1 2 3 4 5 6 7 | import grails.util.Environment beans = { if(Environment.current == Environment.DEVELOPMENT) { mailService(com.example.DummyMailService) } } |
显然你可以更聪明,例如使用记录器而不是
如果你希望能够处理渲染模板的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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)) } } |
和
1 2 3 4 5 | mailService(com.example.DummyMailService) { callPrinter = { com.example.CallPrinter p -> groovyPageRenderer = ref('groovyPageRenderer') } } |
GreenMail 插件是我能想到的最接近您想要的插件(请参阅此处的插件)。它将在网页中呈现电子邮件(插件提供控制器),不确定您是否可以设置 Log4j 将电子邮件记录到控制台...