从数据库发送电子邮件的工具

时间:2010-10-28 02:52:59

标签: java email groovy email-integration

我们正在开发一个需要发送用Java / Groovy编写的电子邮件的webapp。目前,在我们调用Java Mail API将邮件发送到SMTP服务器之前,我们将每封电子邮件都保存到数据库中。

我想异步发送电子邮件。我想保留电子邮件然后让另一个进程接收电子邮件并发送它(并仅发送一次)。理想情况下,此过程在我的webapp之外运行。

有没有工具可以做到这一点?

更新:此解决方案需要防止重复的电子邮件,并且需要处理电子邮件中的峰值。我希望有人已经写了一个离线电子邮件处理器。 (我宁愿不自己实现这个。)

6 个答案:

答案 0 :(得分:4)

使用cron作业读取数据库的建议是非常可行的。

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

查看Apache的ActiveMQ以获得JMS的良好开源实现。

答案 1 :(得分:1)

如果您正在使用Linux / Unix,您可以创建一个cron作业,每隔几分钟运行一次,调用程序从数据库中获取电子邮件并将其发送出去。您还可以在数据库中有一个字段来指示消息是否已发送。这种方法的缺点是,从webapp持续发送电子邮件到运行cron作业时,可能会有几分钟的延迟。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果它不是Oracle DB,您可以使用UTL_MAIL包编写PL / SQL以通过SMTP服务器发送邮件。然后创建一个预定的作业,以按照您希望的时间表执行。

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/u_mail.htm

答案 4 :(得分:0)

由于您已经在使用groovy,这可能是解决问题的有趣工具

http://gaq.sourceforge.net/

答案 5 :(得分:0)

您可以使用Quartz(一个调度库(类似于cron))来安排读取数据库并发送电子邮件的定期任务。如果你正在使用Grails,那么有一个Quartz插件可以让Quartz使用更多的Groovy。