grails发送电子邮件:mailService始终为null

时间:2013-11-13 20:33:17

标签: email grails groovy grails-plugin

在发布之前,我确实在这里和那里浏览所有帖子,
但是没有让它发挥作用,
为什么我的mailService始终为null

添加了这是我的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();

我在这里遗漏了什么吗?

3 个答案:

答案 0 :(得分:2)

必须为此创建一个bean - 这太过分了。因为你从一个可以使用依赖注入的控制器调用帮助器,所以将它注入并传递给帮助器:

class MyController {

   def mailService

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

<强>更新
我会使用以下方法获得一个通用助手,它不仅仅是发送邮件。

//resources.groovy
import mypackage.MyHelper

beans={
    myHelper(MyHelper){
        mailService = ref('mailService')
    }
}

//Controller
Class MyController{
    def myHelper

    def myAction(){...}
}