使用模板发送电子邮件 - grails

时间:2014-06-28 05:02:17

标签: email grails groovy

我想使用模板发送电子邮件。我想要一个GSP文件,我可以在其中设置样式,然后发送电子邮件。目前发送邮件功能如下:

def sendEmail(){

    mailService.sendMail {
        to "email","**email**"
        from "email"
        subject "Hi"
        body 'Hi'
    }
}

在我的config.groovy文件中

grails {
    mail {
      host = "smtp.gmail.com"
      port = 465
      username = "email"
      password = "pwd"
      props = ["mail.smtp.auth":"true",
               "mail.smtp.socketFactory.port":"465",
               "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
               "mail.smtp.socketFactory.fallback":"false"]
    }
 }

我经历了另一个Stack Overflow post:我应该在哪里添加邮件模板?它在views文件夹中?

sendMail{
    multipart true
    to "[hidden email]"
    subject "Subject goes here"
    html  g.render( template: '/emails/mailTemplate')
    inline 'springsourceInlineImage', 'image/jpg', new File('./web-app/images/springsource.png')
}

更新

我在 EMAILS / 下添加了一个mailTemplate.gsp但是它没有工作。

ERROR I GOT找不到名称[/ emails / mailTemplate]和路径[/emails/_mailTemplate.gsp]

的模板

3 个答案:

答案 0 :(得分:8)

您可以使用groovyPageRenderer.render()来解析您的电子邮件。下面是一个例子:

class MailingService {

    def groovyPageRenderer
    def mailService

    def yourFunction(User user) {

        def content = groovyPageRenderer.render(view: '/mails/myTemplate')
        mailService.sendMail {
            to user.email
            from "email@test.com"
            subject "MySubject"
            html(content)
        }
    }
}

在这种情况下,模板位于:/views/mails/MyTemplateFile.gsp

希望这有帮助。

修改 渲染可以与模型一起使用。例如:

groovyPageRenderer.render(view:'/mails/myTemplate',model:[user:user])

<强> EDIT2: 我忘记在第一次回复中添加mailService

答案 1 :(得分:5)

好吧,你可以试试这段代码......

mailService.sendMail {
            to user.email
            from "email@test.com"
            subject "MySubject"
            body(view:'/emails/mailTemplate', model: [a:A])
        }

此处mailTemplate.gsp位于view/emails。在邮件服务体中,您可以使用呈现语法。 然后在'<%@ page contentType="text/html" %>'

的顶部添加mailTemplate.gsp

答案 2 :(得分:1)

好好看看你的代码,一切看起来都不错。

html g.render(template : '/path/to/template')

应该呈现您的模板,它将成为您邮件的正文。

您是否确保将模板设为_template。由于所有以(_)开头的gsp仅被视为模板。

您还应该将所有样式(css)内联,以便在所有邮件提供程序中呈现它而不会出错。