2016-01-08 41 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() 
     } 
    }