Grails中的邮件插件

时间:2016-02-14 20:52:23

标签: grails gradle dependency-injection

我正在尝试通过我的grails应用程序发送邮件。我正在使用this插件。我把它放在build.gradle中就像这样:

compile "org.grails.plugins:mail:1.0.7"

并刷新了该项目。之后,我开始了Grails(第3节)并且run-app。当我尝试运行sendMail时,我得到了这个例外:

enter image description here

以下是我的电话,emailmessageString类型的变量:

sendMail {
    to email
    subject "Contact"
    body message
}

在插件文档中,它说:

  

邮件插件提供了一个可以在Grails应用程序中的任何位置使用的MailService。 MailService提供了一个名为sendMail的方法,它接受一个闭包。此外,sendMail方法被注入所有控制器以简化访问。

我从未进行过依赖注入(不需要),但我尝试声明def mailService,然后调用mailService.sendMail,但在{{1}上获得NullPointerException }}

我认为这不重要,但我没有安装/运行邮件服务器,但我怀疑这会导致找不到方法错误。

我可以确认在IntelliJ IDEA的Gradle视图中显示正确的依赖关系,以便正确安装。

2 个答案:

答案 0 :(得分:1)

因为我知道这应该有效,所以当你说“尝试使用def mailService”时,我会假设你在错误的地方这样做了。

如果您执行以下操作,您的控制器应该可以工作:

class ContactController {
    def mailService   // note it must be outside of any methods/closure

    def someAction() {
        String email = "bob@gmail.com"
        String message = "This is the email text"
        // some code here is fine
        mailService.sendMail {
            to email
            subject "Contact"
            body message
        }
       // more code here is fine
   }
}

了解注入的服务必须如何命名为“mailService”,并且必须存在于任何闭包或操作之外。 Grails将查找名为MailService的任何类,实例化它并注入它,自动将变量mailService设置为等于对服务的引用。

这一切都假设您为正在使用的任何Grails版本提供了正确的服务

答案 1 :(得分:1)

您使用的Mail插件版本与Grails 3不兼容。如果您想使用该插件,请转到此网址:

https://bintray.com/grails/plugins/mail/view

选择所需的版本。所有与Grails 3兼容的插件都在https://bintray.com/grails/plugins,而不是grails.org中最旧的网址

使用示例:

import grails.plugins.mail.MailService

@Transactional
class SendMailService {

    MailService mailService

    def sendMail(email, subjectMail, bodyMail) {
        mailService.sendMail {
             to email
             subject subjectMail
             html bodyMail
        }
    }
}