【问题标题】:grails sending email: mailService is null alwaysgrails 发送电子邮件:mailService 始终为空
【发布时间】:2013-11-14 04:56:38
【问题描述】:

在这里发帖之前,我确实浏览了这里和那里的所有主题,
但没有让它工作,
为什么我的 mailService 一直为空

添加了这是我的 Config.grooy

grails {
   mail {
     host = "smtp.gmail.com"
     port = 465
     username = "xxxx@gmail.com"
     password = "yyyy"
     props = ["mail.smtp.auth":"true",                     
          "mail.smtp.socketFactory.port":"465",
          "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
          "mail.smtp.socketFactory.fallback":"true"]
   }
} 

这是我的班级,将发送演示邮件

class EmailHelper {
    def mailService;

    def sendMailTO() {
        println "mail service:"+mailService
         mailService.sendMail {
            to 'xxxx@gmail.com'
            from 'xxxx@gmail.com'
            subject "Test"
            body "Test";
         }
    }
}

这就是我从控制器调用的方式

EmailHelper emailHelper = new EmailHelper();
emailHelper.sendMailTO();

我有什么遗漏吗?

【问题讨论】:

    标签: email grails groovy grails-plugin


    【解决方案1】:

    您确实必须为此创建一个bean - 这太过分了。由于您从可以使用依赖注入的控制器调用助手,因此将其注入那里并将其传递给助手:

    class MyController {
    
       def mailService
    
       def someAction() {
           EmailHelper emailHelper = new EmailHelper()
           emailHelper.mailService = mailService
           emailHelper.sendMailTO()
           ...
       }
    }
    

    【讨论】:

    • 在这里更有意义。我同意,我会使用一个通用帮助器(它不仅仅是发送邮件)作为一个 bean,而不是电子邮件帮助器,它只有一个行为可以执行,作为一个 bean。
    【解决方案2】:

    MailService 需要通过依赖注入注入到您的EmailHelper 类中。您声明的方式mailService 仅适用于服务和控制器等 Grails 工件。这意味着如果您的 EmailHelper 类位于 src/groovy 中,它将无法工作。相反,将您的类创建为像 EmailHelperService (grails create-service EmailHelper) 这样的服务并在那里进行依赖注入。

    【讨论】:

    • 不太理解反对票。此答案应简要说明他/她的方法为何不起作用以及使其起作用的快速方法。
    • 我认为这是因为没有考虑更简单的方法。我也发生了同样的事情。 :) 在伯特的回答之后我纠正了它。
    【解决方案3】:

    当您希望在 src/groovy 下使用帮助程序类时,您必须注入 mailService 的依赖项,然后将帮助程序注入控制器而不是实例化它。

    更新
    我会使用下面的方法来获得一个通用的帮助器,它不仅仅是发送邮件。

    //resources.groovy
    import mypackage.MyHelper
    
    beans={
        myHelper(MyHelper){
            mailService = ref('mailService')
        }
    }
    
    //Controller
    Class MyController{
        def myHelper
    
        def myAction(){...}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      相关资源
      最近更新 更多