我的应用程序负责用户注册(可以选择接收电子邮件通知),并且可以轻松地为给定用户处理基于模板的实际电子邮件呈现。JavaMail 提供邮件传输层。但是我应该如何设计业务对象(例如用户)和邮件传输之间的应用层呢?
直接的方法是一个简单的同步循环:遍历用户,将电子邮件排队,然后完成。“队列”可能意味着将它们直接发送到 MTA(邮件服务器),或发送到内存中的队列以供另一个线程使用。
但是,我还计划实现诸如限制电子邮件速率、处理退回的电子邮件 (NDR) 以及在应用程序重新启动时维护状态等功能。我的直觉是,一个好的设计会尽可能地将其与业务层和邮件传输层解耦。我想知道其他人以前是否解决过这个问题,但是经过大量搜索后,我没有找到任何似乎适合这个问题的 Java 库。独立的邮件应用程序,例如James或列表服务器,范围太大;Spring 的 MailSender或Commons Email等软件包的范围太小(基本上是 JavaMail 的直接替代品)。对于其他语言,我也没有找到任何合适的东西。
我很好奇其他开发人员如何将批量邮件添加到他们的应用程序中。