【发布时间】:2016-04-12 20:29:24
【问题描述】:
有没有办法挂钩到 grails Mail plugin 的 sendMail 方法并修改正文?我需要在使用插件发送的每封电子邮件中插入签名之类的东西。
我想我可以在每个电子邮件模板中添加一个包含 gsp,但是……呃 :) 还有另一种(更懒惰的)方法吗?
谢谢
【问题讨论】:
标签: grails grails-plugin
有没有办法挂钩到 grails Mail plugin 的 sendMail 方法并修改正文?我需要在使用插件发送的每封电子邮件中插入签名之类的东西。
我想我可以在每个电子邮件模板中添加一个包含 gsp,但是……呃 :) 还有另一种(更懒惰的)方法吗?
谢谢
【问题讨论】:
标签: grails grails-plugin
为什么需要钩子?为什么不创建自己的 textParsing 方案并允许它为您的邮件文本添加签名,并且您可以拥有任意数量的此类解析实例。它与邮寄无关。
基本的字符串操作和代码可重用性技术应该可以满足需要。
编辑: 你虽然回答了自己,即使用 gsp 模板或任何模板 api,如 thymleaf 或 sitemesh。
另一种更基本的技术可能是解析一些文本,例如您想要添加签名和用户名。
示例
Hello #username#
mail_content
#signature#
现在,您可以在这里使用 String.replaceAll 并替换为所需的值。
但可以肯定的是,java mail api 默认不提供这样的钩子。
如果你熟悉 spring 和 AOP 那么
最终解决方案可能是: to use Spring Aspect Oriented Programming for intercepting any method and perform some tasks before/after or around it. I believe spring aspects should definitely help you out.
不过,我从未尝试过使用 grails 的方面。 This 应该能帮到你
【讨论】:
如果您将方法封装在用于发送邮件的服务中,则可以将签名附加到电子邮件正文中。
public send(String emailTo, String emailSubject, String emailBody, String emailFrom, String customSignature = "") {
String signature = customSignature?: "<p>Default signature</p>"
try {
mailService.sendMail {
from emailFrom
to emailTo
subject emailSubject
html (emailBody + signature)
}
} catch (Exception e) {
log.error('There was an error sending the email')
log.error e.getMessage()
}
}
【讨论】: