2010-10-28 76 views
3

我们正在开发一个web应用程序,需要发送用Java/Groovy编写的电子邮件。目前,我们将每封电子邮件都保存到数据库,然后再调用Java邮件API将邮件发送到我们的SMTP服务器。从数据库发送电子邮件的工具

我希望异步发送电子邮件。我想坚持电子邮件,然后让另一个进程接收电子邮件并发送(并只发送一次)。理想情况下,这个过程运行在我的webapp之外。

有没有做任何工具?

更新:此解决方案需要防止重复的电子邮件,它需要处理电子邮件中的尖峰。我希望有人已经写了一个离线电子邮件处理器。如果您使用的Linux/Unix,你可以创建一个cron作业到调用程序从数据库中抓取邮件并送出运行每隔几分钟(我宁愿没有这个工具我自己。)

+0

数据库中的电子邮件是否完整,还是必须与模板合并? – 2010-10-28 02:55:45

+0

其完整。我们已经完成了所有的预处理。 (现在它只有一个文本邮件) – Tihom 2010-10-28 02:58:44

+0

你使用grails吗?或只是groovy? – 2010-10-28 04:03:35

回答

4

使用cron作业来读取数据库的建议是挺管用的。

另一个好方法这里是使用Java消息服务(JMS)消息队列。这些是持久的(由数据库备份)并且可靠。您可以让一个或多个生产者程序使用其中的相关数据排队消息,然后一个或多个消费者处理消息并将其出列。所有这些设置都具有非常高的可靠性,并且您可以获得异步解耦操作的灵活性,这意味着在电子邮件尖峰期间,消息队列可以变大,直到消费者赶上峰值。另一个好处是,一旦消费者获得该电子邮件而不是计时器,电子邮件就会消失。另外,如果您需要高可用性,则可以让多个使用者在发生故障时使用。

退房Apache的ActiveMQ一个很好的开源实现JMS的。

1

。您也可以在数据库中有一个字段来指示消息是否已发送。这种方法的缺点是,从Web应用程序持续发送电子邮件和执行cron作业时起,可能会有几分钟的延迟。

0

设置cron作业和使用脚本来查询数据库,并通过sendmail的发送电子邮件。

0

你可以使用石英,调度库(cron类似),计划一个重复的任务,读取数据库并发送电子邮件。如果您使用的是Grails,那么Quartz插件可以使Quartz更加有效地使用Groovy。