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

5jvtdoz2  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(192)

我有一个应用程序,发送电子邮件给一组用户。我的问题是有很多用户,我必须发送一封邮件一次和smpt服务器块。我怎么能发送与 Spring 邮件给这些用户一点一点?

ttcibm8c

ttcibm8c1#

设置一个支持卫星/中继模式队列(如Postfix)的本地MTA。让它中继到您的真实的SMTP服务器。请确保它是安全的,即只能中继本地请求。
将您的电子邮件投递到本地MTA。您可以按需要的速度投递电子邮件,本地MTA会在可以投递时将它们发送到远程SMTP服务器。

nlejzf6q

nlejzf6q2#

把你的应用程序分成两部分。一部分准备电子邮件并把消息交给后端服务。后端服务一直在运行,当它有电子邮件要发送时,它会在消息之间暂停,以避免邮件服务器超载。有很多方法可以将两者联系起来,但是一个非常简单的方法是简单地将一小批电子邮件请求写入一个接收目录中的文件。2一个文件中可能写入10封电子邮件,然后写入一些END OF BATCH指示符,关闭它,打开一个新文件并写入更多。后端任务将在此传入目录中查找文件。当它找到一个文件时,它将尝试读取整个文件,然后查找END OF BATCH指示符。如果它不在那里,然后重试(或者继续阅读)。一旦你有了一个完整的批,发送一封邮件到邮件服务器,暂停x秒,发送下一封,以此类推。你将不得不试验x的值,以找到一个可靠的,仍然得到邮件了,即防止接收目录填满磁盘。当然,一旦你发送了一个批处理,删除包含它的文件。
更好的方法是集成Camel(来自Apache)到这两个应用程序中,并定义使用某种消息传递来发送电子邮件请求的端点,例如JMS或SEDA。但您仍然需要将与邮件服务器的通信分离到一个单独的任务中,在该任务与主应用程序之间使用缓冲区。实际上,由于邮件服务器无法为您缓冲足够的工作,你必须在你这边放一个缓冲器来保持事情顺利进行。

相关问题