【发布时间】:2014-12-19 08:21:16
【问题描述】:
我需要实现一个智能邮件列表/中继(在 Linux 上)。这个想法是:
- 服务器接收到列表地址的电子邮件
- 它会解析邮件,并确认它来自受信任的来源
- 它在本地数据库中查找收件人列表
- 它对收到的邮件进行一些小处理,并将其发送到列表中
- 它将所有退回邮件返回给原始发件人
服务器已经安装了 sendmail,但如果需要我可以使用另一个 MTA。
这听起来很简单,并且 sendmail 已经具有数据库查找功能。但是,我认为这不是特别灵活,并且我不想让 sendmail 独立访问我的数据库。
我最接近现有解决方案的是E-MailRelay,它看起来不错,但如果可以避免的话,我不想要集成它的开销。
我希望在开始之前对我的 B 计划进行全面检查,或者提供其他建议。我没有找到任何有用的文档,而且 Sendmail 书似乎没有任何相关内容。
我在想的是:
- 为 sendmail 实现一个 SMTP 传递代理,让 sendmail 和 DA 在同一台服务器上运行,DA 监听某个未指定的端口(哪个?)
- Sendmail 在连接到 DA 时大概充当 SMTP 客户端,我的 DA 将响应 MAIL/RCPT/DATA 命令
- DA 处理收到的邮件,这些邮件要么是发送到邮件列表的消息,要么是退回邮件,也可能是回复
- DA 然后切换到客户端模式,连接到 sendmail,并发出 MAIL/RCT/DATA 命令以将响应返回给原始发件人
这有意义吗?谢谢。
【问题讨论】:
-
你为什么要重新实现这个?您正在描述 Sendmail 别名。如果您想开发新的东西,我建议您改为使用像 Postfix 这样的现代 MTA。
-
@tripleee:我认为,这比别名更笼统。我可以使用
:include:为列表地址设置别名,但这只是引用一个静态文件,我需要从我自己的数据库中单独维护它。而且我无法进行邮件处理。或者我可以通过|将别名添加到外部程序,但这只是使用标准输入上的传入邮件执行程序,然后我必须自己执行 sendmail 和响应。那将毫无意义-设置套接字肯定更好吗?此外,如果我在套接字上使用 SMTP,我有一个完全通用的解决方案,与 sendmail 无关。 -
你严重过度设计了这个。现有的邮件列表管理器做得很好。参见例如gnu.org/software/mailman
-
@tripleee:我过去曾运行过几个邮递员列表,它们是 PITA。此外,这不是我要找的。我有一个基于 MySql 数据库的 webapp,并且列表地址会随着数据库的内容而频繁更改。 mailman 本质上是静态的。正如我所说,我还必须处理传入的消息,而不仅仅是将它们转发到列表中。
标签: smtp sendmail emailrelay