使用Java和Spring慢慢发送电子邮件

时间:2013-10-03 17:34:15

标签: java spring email asynchronous smtp

您好我有一个向一组用户发送电子邮件的应用程序。我今天的问题是有很多用户需要一次发送一封邮件和smpt服务器块,我怎样才能一点一点地向这些用户发送弹簧邮件。

先谢谢。

2 个答案:

答案 0 :(得分:0)

在卫星/中继模式下设置支持排队的本地MTA(例如Postfix)。让它转发到您的真实SMTP服务器。确保它是安全的,即只能从本地请求中继。

将您的电子邮件放入本地MTA。您可以根据需要尽快删除它们,并且本地MTA会尽可能将它们发送到远程SMTP服务器。

答案 1 :(得分:0)

将您的应用分成两部分。一件准备电子邮件并将消息提供给后端服务。后端服务一直运行,当它有要发送的电子邮件时,它会在消息之间暂停以避免邮件服务器过载。有很多方法可以将两者联系起来,但一个非常简单的方法就是将小批量的电子邮件请求写入传入目录中的文件。只需写10封电子邮件到一个文件,然后写一些END OF BATCH指示器,关闭它,打开一个新文件并写一些。然后,后端任务将在此传入目录中查找文件。当它找到一个文件时,它将尝试读取整个文件,然后查找END OF BATCH指示符。如果不存在,则重试(或继续阅读)。完成批处理后,向邮件服务器发送一封电子邮件,暂停x秒,发送下一封,依此类推。您将不得不尝试使用x的值来查找仍然可以将邮件输出的可靠邮件,即防止传入目录填满磁盘。 当然,一旦发送批次,删除包含它的文件。

更好的方法是将Camel(来自Apache)集成到两个应用程序中,并定义使用某种消息传递来发送电子邮件请求的端点,例如JMS或SEDA。但是,您仍然会将与邮件服务器的通信分离为一个单独的任务,并在该应用程序与主应用程序之间建立缓冲区。实际上,由于邮件服务器无法为您缓冲足够的工作,您必须在您身边放置一个缓冲区以保持平稳运行。