2

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

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

但是,我还计划实现诸如限制电子邮件速率、处理退回的电子邮件 (NDR) 以及在应用程序重新启动时维护状态等功能。我的直觉是,一个好的设计会尽可能地将其与业务层和邮件传输层解耦。我想知道其他人以前是否解决过这个问题,但是经过大量搜索后,我没有找到任何似乎适合这个问题的 Java 库。独立的邮件应用程序,例如James或列表服务器,范围太大;Spring 的 MailSenderCommons Email等软件包的范围太小(基本上是 JavaMail 的直接替代品)。对于其他语言,我也没有找到任何合适的东西。

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

4

2 回答 2

3

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

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

在将解决方案与邮件传输层分离方面……我已经将这种方法应用于自动化 Twitter 客户端,并发现它同样成功。

于 2010-05-26T04:32:46.683 回答
0

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

于 2010-05-26T04:28:31.567 回答