繁体   English   中英

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

[英]Send emails slowly with Java and Spring

您好,我有一个将电子邮件发送给一组用户的应用程序。 我今天的问题是,有很多用户必须立即发送一封邮件,而smpt服务器会阻塞,我如何一点一点地将spring邮件发送给该用户。

提前致谢。

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

将您的电子邮件放在本地MTA中。 您可以按照需要的最快速度删除它们,并且本地MTA会在可能的情况下将它们发送到远程SMTP服务器。

将您的应用分成两部分。 一件准备电子邮件,然后将消息提供给后端服务。 后端服务一直运行,并且在有电子邮件要发送时,它会在消息之间暂停,以避免邮件服务器超载。 链接这两者的方法有很多,但是真正简单的方法是将少量的电子邮件请求简单地写入传入目录中的文件中。 只需将10封电子邮件写入一个文件,然后编写一些END OF BATCH指示器,将其关闭,打开一个新文件,然后再编写其他文件。 然后,后端任务将在此传入目录中查找文件。 找到文件后,它将尝试读取整个内容,然后寻找END OF BATCH指示器。 如果不存在,请重试(或继续阅读)。 批处理完成后,将一封电子邮件发送到邮件服务器,暂停x秒,再发送一封,依此类推。 您将不得不尝试使用x的值来找到一个可靠的参数,该参数仍然可以发送邮件,即防止传入目录填充磁盘。 当然,一旦发送了一批,则删除包含它的文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM