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

3
我们正在开发一个Web应用程序,需要使用Java / Groovy编写的电子邮件发送。目前,在调用Java Mail API将邮件发送到我们的SMTP服务器之前,我们会将每封电子邮件持久化到数据库中。
我想异步发送电子邮件。 我想将电子邮件持久化,然后让另一个进程接收电子邮件并发送它(仅发送一次)。 理想情况下,此进程在我的Web应用程序之外运行。
有没有工具可以做到这一点?
更新:此解决方案需要防止重复电子邮件,并且需要处理电子邮件峰值。 我希望有人已经编写了离线电子邮件处理器。(我不想自己实现这个功能。)

电子邮件是否已完整存储于数据库中,还是需要与模板合并? - Tony Ennis
已经完成了。我们已经完成了所有的预处理。(目前只是一封文本邮件) - Tihom
你是在使用Grails吗?还是只用Groovy? - Aaron Saunders
在这个特定的项目中,我们只是使用Groovy。 - Tihom
6个回答

4
使用cron定时任务读取数据库的建议是可行的。另一个好的方法是使用Java消息服务(JMS)消息队列。这些队列是持久化的(由数据库支持)和可靠的。您可以有一个或多个生产者程序将相关数据的消息加入队列,然后一个或多个消费者处理消息并将其出队列。所有这些都被设置为非常高的可靠性,并且通过异步解耦操作,您获得了灵活性,这意味着在电子邮件高峰期间,消息队列可以变得更大,直到消费者赶上高峰期。另一个好处是电子邮件一旦被消费者处理就立即发出,而不是按计时器。此外,如果需要高可用性,可以拥有多个消费者以防一个消费者宕机。请查看Apache的ActiveMQ,这是一个很好的开源JMS实现。

1

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


0
设置一个cron job并使用脚本查询数据库,通过sendmail发送电子邮件。

0

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接