gpt4 book ai didi

email - Grails邮件插件:查看的绝对路径

转载 作者:行者123 更新时间:2023-12-02 14:09:18 25 4
gpt4 key购买 nike

我需要将我的电子邮件模板存储在一个可以编辑的位置,而无需重新部署grails应用程序。我正在寻找一种基于绝对路径将这些模板呈现为邮件插件 View 的方法。当前,内置的“ View ”和grails渲染方法均基于grails-app / views位置。

更新:现在,我将使用SimpleTemplateEngine并将字符串输入主体。我仍然想知道是否还有其他方法可以实现这一目标。

最佳答案

尚不能解决问题,但是这个问题似乎没有得到很多答案,因此我认为在这里解决问题不会太分心。

这是我在resources.groovy中尝试过的方法:

mailMessageContentRenderer(gregg.stackoverflow.CustomPathMailMessageContentRenderer) {
groovyPagesTemplateEngine = ref('groovyPagesTemplateEngine')
groovyPagesUriService = ref('groovyPagesUriService')
grailsApplication = ref('grailsApplication')
}

如果查看邮件插件,则定义了两个bean mailMessageBuidlerFactorymailMessageContentRenderer。根据 other people have done的实际需求,我真的希望它覆盖渲染器,并允许您自定义行为。当我登录日志以查看 mailService.mailMessageBuilderFactory.mailMessageContentRenderer的类时,它是自定义类,因此接线似乎可以正常工作。我创建了以下自定义渲染器:
    package gregg.stackoverflow

import org.codehaus.groovy.grails.commons.ConfigurationHolder

class CustomPathMailMessageContentRenderer extends grails.plugin.mail.MailMessageContentRenderer {


@Override
protected createTemplate(String templateName, String controllerName, String pluginName) {
def gspOverride = ConfigurationHolder.config.mailtemplate.gsp.dir
println "Custom one!"
if (!gspOverride) {
return super.createTemplate(templateName, controllerName, pluginName)
}
else {

def contextPath = gspOverride + templateName +".gsp"

def gspFile = new File(contextPath)

def template = groovyPagesTemplateEngine.createTemplate(gspFile)

if (!template) {
if (pluginName) {
throw new IllegalArgumentException("Could not locate email view ${templateName} in plugin [$pluginName]")
} else {
throw new IllegalArgumentException("Could not locate mail body ${templateName}. Is it in a plugin? If so you must pass the plugin name in the [plugin] variable")
}
}

return template
}
}
}

另外,我在 Config.groovy中添加了一个属性,以指示名为 mailtemplate.gsp.dir的GSP目录,该目录将在默认功能和自定义目录之间切换。

但是我输入的println语句不显示。漫长的一天后,我一直把它弄得一团糟,所以很可能我的大脑被炸了,但是今天我没有时间弄清楚它,所以很抱歉张贴无法正常工作,非常粗糙的代码。希望你能弄清楚。

更新

好的,因为一旦我开始从事此类工作就可以成为强制症,并且可以长期饮用咖啡因而没有食物,所以我在午餐时间工作了……在大多数情况下……:-)必须使用GSP View ,但我不确定模板是否可以使用(我猜您的GSP View 中包含模板也无法使用)。因此 sendMail调用如下所示:
mailService.sendMail {
to "name@domain.tld"
body (view:"/test", model:[name:"Chris"])
// subject, from, etc still work
}

因此,使用上述所有代码和以下代码行:
mailtemplate.gsp.dir=C:\\gsptest
和一个名为 C:\gsptest\test.gsp的GSP,我能够从外部GSP成功地向自己发送电子邮件。

关于email - Grails邮件插件:查看的绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271351/

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