我正在尝试通过我的grails应用程序发送邮件。我正在使用this插件。我把它放在build.gradle
中就像这样:
compile "org.grails.plugins:mail:1.0.7"
并刷新了该项目。之后,我开始了Grails(第3节)并且run-app
。当我尝试运行sendMail
时,我得到了这个例外:
以下是我的电话,email
和message
是String
类型的变量:
sendMail {
to email
subject "Contact"
body message
}
在插件文档中,它说:
邮件插件提供了一个可以在Grails应用程序中的任何位置使用的MailService。 MailService提供了一个名为sendMail的方法,它接受一个闭包。此外,sendMail方法被注入所有控制器以简化访问。
我从未进行过依赖注入(不需要),但我尝试声明def mailService
,然后调用mailService.sendMail
,但在{{1}上获得NullPointerException
}}
我认为这不重要,但我没有安装/运行邮件服务器,但我怀疑这会导致找不到方法错误。
我可以确认在IntelliJ IDEA的Gradle视图中显示正确的依赖关系,以便正确安装。
答案 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
}
}
}