Grails 中的邮件插件

Posted

技术标签:

【中文标题】Grails 中的邮件插件【英文标题】:Mail plugin in Grails 【发布时间】:2016-05-25 16:24:18 【问题描述】:

我正在尝试通过我的 grails 应用程序发送邮件。我正在使用this 插件。我已经把它放在build.gradle 中,如下所示:

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

并刷新了项目。在那之后,我启动了 Grails (v3) 并做了run-app。当我尝试运行 sendMail 时,我得到了这个异常:

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

sendMail 
    to email
    subject "Contact"
    body message

在插件文档中,它说:

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

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

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

我可以确认 IntelliJ IDEA 的 Gradle 视图中显示了正确的依赖项,因此它可以正确安装。

【问题讨论】:

如果你做 Grails,你就做依赖注入。 如果运行:grails install-plugin mail 会发生什么 @pczeus "$ grails install-plugin mail | 找不到错误命令 install-plugin 您的意思是:安装或列出插件或插件信息?" 这看起来不像 Grails 3 的 Mail 插件的正确版本。它应该是 2.0.0.RC4 版本,请参见此处:bintray.com/grails/plugins/mail/view 我是直接从邮件插件网站拿的:grails.org/plugin/mail 【参考方案1】:

您使用的 Mail 插件版本与 Grails 3 不兼容。如果您想使用该插件,请访问以下网址:

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

选择您想要的版本。所有与 Grails 3 兼容的插件都在 https://bintray.com/grails/plugins 中,而不是来自 grails.org 的最旧 url

使用示例:

import grails.plugins.mail.MailService

@Transactional
class SendMailService 

    MailService mailService

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

【讨论】:

【参考方案2】:

既然我知道这应该可行,我会假设当你说你“尝试使用 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 提供了正确的服务

【讨论】:

以上是关于Grails 中的邮件插件的主要内容,如果未能解决你的问题,请参考以下文章

Grails 4:邮件插件在 Elastic Beanstalk 上运行时无法读取“密码”属性

在 Grails 的 Spring Security 插件中使用电子邮件和用户名作为登录名

Grails 的用户管理插件/框架?

Grails 中的电子邮件验证

客户端无权作为此发件人发送(office 365,grails)

Grails MongoDB 插件:嵌入式集合与引用