Grails邮件插件运行时配置

时间:2014-12-29 17:00:42

标签: email grails configuration

使用grails邮件插件1.0.7。

https://jira.grails.org/browse/GPMAIL-36表示可以在运行时更改自1.0.1以来的plguin配置。可悲的是,它没有解释如何实现它。

我希望能够在运行时更改用户名,以便能够使用不同的邮件帐户。

感谢。

3 个答案:

答案 0 :(得分:2)

基于this code,您应该能够在运行时更改配置,并且邮件插件将根据您的更改自动重新部署和更新邮件发件人。

示例:

Holders.config.grails.mail.username = 'foo'
Holders.config.grails.mail.password = 'bar'
sendMail {
    to "foo@bar.com"
    from "bar@foo.com"
    subject "Hi"
    body "This is an email"
} 

更新

看起来以这种方式更改配置实际上并不会触发onConfigChange事件。每this,您可以手动触发事件。像这样:

Holders.pluginManager.getGrailsPlugin('mail').notifyOfEvent(GrailsPlugin.EVENT_ON_CONFIG_CHANGE, Holders.config)

答案 1 :(得分:0)

我已经意识到可以从上下文访问mailSender bean并更新它,如此处所述

Changing mail configuration in runtime

然而,如果@rmlan解决方案最终有效,那么它可能是一个更清洁的解决方案。

答案 2 :(得分:0)

实际上,thr rmlan解决方案可以使用以下修复程序。由于onConfigChange比较了现有配置图的hashCode和新配置,所以如果你在原始配置(Holders.config.grails.mail)中设置新的配置,那么两个配置是相同的,它永远不会通过条件来应用新的更改,所以a应该创建新结构并将其传递给notifyOfEvent方法,以将更改标记为不同的hashCodes。

def mailConfig = [ grails: [ mail: [:] ]  ]

mailConfig.grails.mail.host = newHost
mailConfig.grails.mail.port = newPort

Holders.pluginManager.getGrailsPlugin('mail').
        notifyOfEvent(GrailsPlugin.EVENT_ON_CONFIG_CHANGE, mailConfig)

仍在使用异步邮件,而且这个会产生以下异常

No qualifying bean of type [grails.plugin.mail.MailService] is defined: expected single matching bean but found 2: nonAsynchronousMailService,mailService
由于onConfigChange的以下部分而引发的

event.ctx.getBean(MailService.class).setPoolSize(mailConfig.poolSize?:null)

评论它让它可以作为一种解决方法,但是调用邮件插件的 sendMail ,而不是异步邮件,因此如果在构造邮件时使用异步邮件功能,则可能会引发异常。因此,在此变通方法中使用异步邮件应使用 sendAsynchronousMail 方法。

相关问题