【问题标题】:Grails Mail plugin sendMail hookGrails Mail 插件 sendMail 钩子
【发布时间】:2016-04-12 20:29:24
【问题描述】:

有没有办法挂钩到 grails Mail pluginsendMail 方法并修改正文?我需要在使用插件发送的每封电子邮件中插入签名之类的东西。

我想我可以在每个电子邮件模板中添加一个包含 gsp,但是……呃 :) 还有另一种(更懒惰的)方法吗?

谢谢

【问题讨论】:

    标签: grails grails-plugin


    【解决方案1】:

    为什么需要钩子?为什么不创建自己的 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 应该能帮到你

    【讨论】:

    • 我想在邮件离开系统之前拦截它并添加一些文本。不想解析现有文本。但即使我想这样做,我怎么能做到呢?
    • 小心 Spring 方面,因为切入点的使用和选择要非常明智。
    • 你有使用任何 grails 插件的工作示例吗?我尝试了链接中的示例,但它似乎不适用于插件
    • 您想要一个带有方面的工作示例吗?如是!有空我可以试试。
    【解决方案2】:

    如果您将方法封装在用于发送邮件的服务中,则可以将签名附加到电子邮件正文中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多