Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于向webapp的所有用户发送邮件的框架或设计模式_Java_Architecture_Email_Bounce - Fatal编程技术网

Java 用于向webapp的所有用户发送邮件的框架或设计模式

Java 用于向webapp的所有用户发送邮件的框架或设计模式,java,architecture,email,bounce,Java,Architecture,Email,Bounce,我的应用程序负责用户注册(可以选择接收电子邮件通知),并且可以轻松处理给定用户的实际基于模板的电子邮件呈现。JavaMail提供了邮件传输层。但是,我应该如何设计业务对象(例如用户)和邮件传输之间的应用程序层呢 简单的方法是一个简单的同步循环:遍历用户,将电子邮件排队,然后完成。“队列”可能意味着直接将它们发送到MTA(邮件服务器),或发送到内存中的队列以供其他线程使用 不过,我还计划实现一些功能,如限制电子邮件的发送速度、处理被退回的电子邮件(NDR)以及在应用程序重新启动时保持状态。我的直觉

我的应用程序负责用户注册(可以选择接收电子邮件通知),并且可以轻松处理给定用户的实际基于模板的电子邮件呈现。JavaMail提供了邮件传输层。但是,我应该如何设计业务对象(例如用户)和邮件传输之间的应用程序层呢

简单的方法是一个简单的同步循环:遍历用户,将电子邮件排队,然后完成。“队列”可能意味着直接将它们发送到MTA(邮件服务器),或发送到内存中的队列以供其他线程使用

不过,我还计划实现一些功能,如限制电子邮件的发送速度、处理被退回的电子邮件(NDR)以及在应用程序重新启动时保持状态。我的直觉是,一个好的设计将尽可能地将其与业务层和邮件传输层分离。我想知道以前是否有人解决过这个问题,但经过大量搜索,我还没有找到任何适合这个问题的Java库。独立邮件应用程序(如或列表服务器)的范围太大;像或这样的包在范围上太小(基本上是JavaMail的替代品)。对于其他语言,我也没有找到合适的


我很好奇其他开发人员是如何将批量邮件添加到他们的应用程序中的。

一种选择是使用硬件设备。我的公司使用Strongmail,至少用于营销传播:。我对它了解不多,但我认为它可以处理大量电子邮件问题,如不要联系列表、限制、避免垃圾邮件过滤等。

我最喜欢的方法是为我的应用程序提供一个“发送”邮件的接口。实际上,该接口的实现只是将邮件排入数据库,以便以后处理。从应用程序的角度来看,这个接口速度很快,因为它执行的实际工作很少。另外,正如您所提到的,持久性可以在服务器停机时生存下来

另一个线程从队列中读取邮件,并将发送邮件的最佳时间延长到其配置的限制,并在成功处理消息后标记队列中的消息(在不删除消息的情况下有效地将消息从队列中移出)。这既提供了已发送邮件的历史记录,也提供了邮件被退回时的参考,等等。在成功发送7天后,我将从队列中删除


在将解决方案与邮件传输层分离方面。。。我已经把这个方法应用到一个自动化的推特客户端,发现它同样成功。< /P>我没有麻烦,只是利用了第三方API(具体地说)。外包可以解决很多邮件相关的问题,如果它是一个商业项目,我会强烈地考虑它,但是它是免费的网站,资源是紧张的。此外,即使使用了第三方API,如何将邮件发送和跳转处理集成到应用程序中的问题仍然存在。我认为这种模式称为“垃圾邮件”:)这是一种用例,而不是一种设计模式!这是一种模式。。。关于商业行为。