使用grails邮件插件1.0.7。
https://jira.grails.org/browse/GPMAIL-36表示可以在运行时更改自1.0.1以来的plguin配置。可悲的是,它没有解释如何实现它。
我希望能够在运行时更改用户名,以便能够使用不同的邮件帐户。
感谢。
答案 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 方法。