gpt4 book ai didi

email - Grails 邮件插件在开发模式下传送到控制台/日志

转载 作者:行者123 更新时间:2023-12-01 11:44:17 24 4
gpt4 key购买 nike

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

我找到的唯一选择是

grails.mail.disabled=true

但是,根据documentation :

this will treat any call to mailService.sendMail() as a no-op

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

有没有一种很好的方法可以将邮件“传送”到控制台?我知道我可以用另一个地址覆盖收件人字段,但我不想在测试时涉及我们的邮件服务器。

最佳答案

您可以创建自己的 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)
}
}

显然你可以更聪明,例如使用记录器而不是 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')
}
}

关于email - Grails 邮件插件在开发模式下传送到控制台/日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16831287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com