实现Grails应用中的邮件异步发送

异步发送电子邮件是大多数Web应用程序的重要组成部分,实现方法有很多。Dave在他博文中介绍了一个简单的方法,即Grails Mail插件与JMS、ActiveMQ合作,使用Gmail服务器发送异步邮件。仅仅几行代码就能完成邮件的异步发送!

下图是博文中要实现的功能设计图:

EmailService控制发送(排队、调整、格式化)的同步部分,SendMailQueue是JMS队列,SendMailService控制邮件的后台发送,这个发送使用Grails Mail插件通过SMTPS/SSL跟Gmail连接。

要实现博文中的代码,首先需要一个Gmail帐户,并且安装Grails1.2.x或者以上版本,以及它的插件:

主要的配置如下:

  • 如果没有外部的ActiveMQ服务器,就需要在Resources.groovy中添加一个connectionFactory bean来设置本地ActiveMQ服务器;
  • 在Config.groovy中为Gmail配置JavaMail参数。

配置完成后,就是代码部分了,实现两个服务以及创建HTML模板。

  • EmailService:在Dave给出的示例中只调用了sendJMSMessage方法,它是由JMS插件提供的,参数为队列名、JMS消息。
  • 由于EmailService用到的队列名参数为“sendMail”,那就需要创建名为“SendMailService”的服务。JMS插件会调用这个服务的onMessage方法。如果onMessage返回值是null,就会告诉MessageListenerAdapter发送消息成功;如果返回值是其他的内容,那就是告诉MessageListenerAdapter需要重新发送。
  • HTML模板:在发送HTML邮件时,需要创建一个GSP模板,用来设置邮件的消息体。这里需要注意,email模板不支持sitemesh布局。

所有准备工作完毕后,就可以发送邮件了!文中邮件服务器是GMail,读者可视情况换成自己的邮件服务器。

有兴趣的读者,请阅读原文了解详细步骤。

关于如何使用Grails发送Gamil邮件,也可参考本网站的《Grails应用发送Gmail邮件》

By huwh - Posted on 16 四月 2010