代码之家  ›  专栏  ›  技术社区  ›  Todd Owen

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

  •  2
  • Todd Owen  · 技术社区  · 14 年前

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

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

    然而 我还计划实现一些功能,比如限制电子邮件的速率、处理退回的电子邮件(NDR)以及在应用程序重新启动时保持状态。我的直觉是,一个好的设计将尽可能地把它从业务层和邮件传输层中分离出来。我想知道其他人以前是否已经解决了这个问题,但是经过大量的搜索,我还没有找到任何适合这个问题的Java库。独立的邮件应用程序,如 James 或者列表服务器的范围太大;包 Spring's MailSender Commons Email 范围太小(基本上都是javamail的替代品)。对于其他语言,我也没有找到合适的。

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Dolph    14 年前

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

    另一个线程从队列中读取消息,并将邮件发送到配置的限制,并在成功处理消息后标记队列中的消息(有效地使消息出列而不删除它们)。这既提供了已发送邮件的历史记录,也提供了邮件被退回时的引用,等等。我在成功发送后7天从队列中删除。

    在将解决方案与邮件传输层分离方面…我将这种方法应用到了一个自动化的Twitter客户机上,发现它同样成功。

        2
  •  0
  •   Willie Wheeler    14 年前

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