1

在这里发帖之前,我确实在这里和那里浏览了所有线程,
但没有让它工作,
为什么我的 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();

我在这里错过了什么吗?

4

3 回答 3

2

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

class MyController {

   def mailService

   def someAction() {
       EmailHelper emailHelper = new EmailHelper()
       emailHelper.mailService = mailService
       emailHelper.sendMailTO()
       ...
   }
}
于 2013-11-13T20:48:11.930 回答
1

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

于 2013-11-13T20:45:01.210 回答
0

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

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

//resources.groovy
import mypackage.MyHelper

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

//Controller
Class MyController{
    def myHelper

    def myAction(){...}
}
于 2013-11-13T20:45:53.213 回答