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

Email grails发送电子邮件:mailService始终为空,email,grails,groovy,grails-plugin,Email,Grails,Groovy,Grails Plugin,在这里发布之前,我确实浏览了这里和那里的所有帖子, 但是没有让它发挥作用, 为什么我的邮件服务总是空的 添加这是我的Config.grooy grails { mail { host = "smtp.gmail.com" port = 465 username = "xxxx@gmail.com" password = "yyyy" props = ["mail.smtp.auth":"true",

在这里发布之前,我确实浏览了这里和那里的所有帖子,
但是没有让它发挥作用,
为什么我的邮件服务总是空的

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

我在这里遗漏了什么吗?

MailService
需要通过依赖项注入注入到您的
EmailHelper
类中。按照您声明的方式,
mailService
将只在服务和控制器等Grails工件中工作。这意味着如果您的
EmailHelper
类位于src/groovy中,它将不起作用。相反,将类创建为服务,如
EmailHelperService
grails创建服务EmailHelper
)然后在那里进行依赖项注入。

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

更新
我将使用下面的方法作为通用助手,它不仅仅是发送邮件

//resources.groovy
import mypackage.MyHelper

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

//Controller
Class MyController{
    def myHelper

    def myAction(){...}
}
你不必仅仅为此创建一个bean——这太过分了。由于您是从可以使用依赖项注入的控制器调用帮助器,因此将其注入该控制器并将其传递给帮助器:

class MyController {

   def mailService

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

在这里更有意义。我同意,我会选择一个普通的助手(不仅仅是发送邮件)作为bean,而不是一个只需要执行一个行为的email助手作为bean。我并不真正理解否决票。这个答案应该简单地解释他/她的方法不起作用的原因,以及使其起作用的快速方法。我认为这是因为没有考虑更简单的方法。我也是这样我在伯特的回答后纠正了它。