我正在尝试使用以下 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,这是一件古董:
如果您注意到红色突出显示的区域内,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/