您好,我有一个向一组用户发送电子邮件的应用程序。我今天的问题是有很多用户我必须一次发送一封邮件并且 smpt 服务器阻塞,我怎样才能用 spring 邮件一点一点地发送给这些用户。
先谢谢了。
您好,我有一个向一组用户发送电子邮件的应用程序。我今天的问题是有很多用户我必须一次发送一封邮件并且 smpt 服务器阻塞,我怎样才能用 spring 邮件一点一点地发送给这些用户。
先谢谢了。
将您的应用程序分成两部分。一件准备电子邮件并将消息提供给后端服务。后端服务一直在运行,当它有电子邮件要发送时,它会在消息之间暂停,以避免邮件服务器过载。有很多方法可以将两者联系起来,但一种非常简单的方法是简单地将小批量的电子邮件请求写入传入目录中的文件中。只需将 10 封电子邮件写入一个文件,然后写入一些 END OF BATCH 指示器,关闭它,打开一个新文件并再写入一些。然后,后端任务将在此传入目录中查找文件。当它找到一个文件时,它会尝试读取整个文件,然后寻找 END OF BATCH 指示器。如果不存在,则重试(或继续阅读)。一旦你有一个完整的批次,发送一封电子邮件到邮件服务器,暂停 x 秒,发送下一封,依此类推。您将不得不尝试 x 的值来找到一个可靠的值,它仍然可以将邮件发送出去,即防止传入目录填满磁盘。当然,一旦您发送了一个批次,请删除包含它的文件。
更好的方法是将 Camel(来自 Apache)集成到两个应用程序中,并定义使用某种消息传递来发送电子邮件请求的端点,例如 JMS 或 SEDA。但是您仍然会将与邮件服务器的通信分离到一个单独的任务中,并在该任务和主应用程序之间设置一个缓冲区。实际上,由于邮件服务器无法为您缓冲足够的工作,因此您必须在自己身边放置一个缓冲区以保持事情顺利运行。
在卫星/中继模式下设置支持排队(如 Postfix)的本地 MTA。让它中继到您真正的 SMTP 服务器。确保它是安全的,即只能从本地请求中继。
将您的电子邮件放在本地 MTA 中。您可以随心所欲地删除它们,并且您的本地 MTA 会尽可能将它们发送到远程 SMTP 服务器。