2016-01-08 35 views
1

有没有办法挂钩到grails Mail pluginsendMail方法并修改正文文本?我需要在使用该插件发送的每封电子邮件中插入类似签名的内容。Grails Mail插件sendMail钩子

我想我可以添加包括gsp到每个电子邮件模板,但...唉:) 有没有另一种(懒惰)的方式来做到这一点?

谢谢

回答

1

为什么你需要一个钩?为什么不创建自己的textParsing方案,并允许它向邮件文本添加签名,并且您可以拥有尽可能多的解析实例。它与邮件无关。

基本字符串操作和代码可重用性技术应该做必要的。

编辑: 你虽然回答自己,即通过使用gsp模板或任何模板api像thymleaf或sitemesh。

另一个更基本的技术可能是解析一些文本,说你想添加一个签名和用户名。

例如

Hello #username# 

mail_content 

#signature# 

现在,在这里你可以使用String.replaceAll并与所需的值替换。

但肯定java邮件API默认情况下不提供这样的钩子。

如果您熟悉春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应该可以帮到你

+0

我想拦截电子邮件,然后离开系统并添加一些文本。真的不想解析现有的文本。但即使我想这样做,我该怎么做呢? – aldrin

+0

看到我上面的修改。 –

+0

要小心Spring的问题,因为切入点要非常明智地使用和选择。 –

1

如果你在发送邮件的服务中封装了一个方法,你可以在邮件正文中附加签名。

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() 
     } 
    }