email - Grails 注入(inject)的邮件服务 bean 在 Controller 内为空

标签 email grails intellij-idea

我正在尝试使用以下 Grails Mail 插件:https://grails.org/plugin/mail

我在 中添加了依赖关系BuildConfig.groovy :

plugins {
 //mail plugin
        compile "org.grails.plugins:mail:1.0.7"
}

通过在 中添加以下代码,我已将其配置为使用特定的电子邮件。配置.groovy :
grails {
    mail {
            host = "smtp.gmail.com"
            port = 465
            username = "-my email-"
            password = "-my password-"
            props = ["mail.smtp.auth":"true",
                     "mail.smtp.socketFactory.port":"465",
                     "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
                     "mail.smtp.socketFactory.fallback":"false"]
            from = "no-reply@kunega.com"
        }
}

我有一个 Controller ,我在其中声明 邮件服务所以它应该作为一个bean注入(inject):
@Secured("permitAll")
class RegisterController {

    def mailService

    def springSecurityService

    @Transactional
    def registerAccount(UserCommand userCommand) {
        def model
        if (springSecurityService.isLoggedIn()) {
            model = [success: false, message: 'Log out to register a new account.']
            response.status = 400
        } else if (userCommand.validate()) {
            User u = userCommand.createUser()
            u.save(flush: true);
            Role role = Role.findByAuthority("ROLE_USER")
            UserRole.create u, role, true

            def link = createLink(controller: 'register', action: 'activateAccount', params: [code: u.confirmCode])

            mailService.sendMail {
                async true
                to 'kunega@mailinator.com'
                html "<a href=" $ { link } ">Activate your account on Kunega</a>"
            }

            model = [success: true, message: 'An activation link has been sent to your email.']
            response.status = 201
        } else {
            model = [success: false, errors: userCommand.getErrors()]
            response.status = 400
        }
        render model as JSON
    }
}

我正在尝试使用 发送邮件 方法在注册账号 Controller 的方法。但是我收到一个错误,它基本上说 mailService 对象为空。这是错误消息:
errors.GrailsExceptionResolver NullPointerException occurred when processing request: [POST] /Kunega/register/createAccount
Cannot invoke method $() on null object. Stacktrace follows:
java.lang.NullPointerException: Cannot invoke method $() on null object
    at com.kunega.RegisterController$_$tt__registerAccount_closure2.doCall(RegisterController.groovy:32)
    at grails.plugin.mail.MailService.sendMail(MailService.groovy:53)
    at grails.plugin.mail.MailService.sendMail(MailService.groovy:59)
    at com.kunega.RegisterController.$tt__registerAccount(RegisterController.groovy:29)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
    at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

还有一件奇怪的事情我应该提一下。我正在使用 IntelliJ Ultimate Edition,这是一件古董:
enter image description here

如果您注意到红色突出显示的区域内,IDE 显示它无法识别传递给 的闭包内的参数。发送电子邮件 .
我以前从未使用过这个插件,所以我只是按照文档中的步骤进行操作,但显然出了点问题。感谢您的帮助。

最佳答案

在您的代码中,您有:

html "<a href=" $ { link } ">Activate your account on Kunega</a>"

我想应该是:
html "<a href=\""+ link + "\">Activate your account on Kunega</a>"

或者
html "<a href=\"${ link }\">Activate your account on Kunega</a>"

否则你调用一个方法html带参数 "<a href=" , $ , { link } (返回“链接”的闭包)和">Activate your account on Kunega</a>" .

关于email - Grails 注入(inject)的邮件服务 bean 在 Controller 内为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35127434/

相关文章:

html - 尝试在我的电子邮件中使用 MSO 条件,但在发送到 Outlook 时会创建重复的按钮。我该如何解决?

c - 关于用 C 编写 POP3 客户端

list - 如何在Grails下使用MongoDB存储嵌入文档的列表?

javascript - JS 级别的 Grails 授权

android - 无法将新的 Android Gradle 插件与 IntelliJ IDEA 一起使用

javascript - 如何在 Javascript/Typescript 中使用 Storyblok 电子邮件服务?

django - 如何增加 Django forms.Form CharField 的大小

grails - “grails -Dserver.port=9999 run-app”无效

java - Intellij 自动构建 - 不存在

macos - 使用 IntelliJ 作为 git mergetool 总是一启动就退出