使用SMTP服务器/客户端实现智能中继

使用SMTP服务器/客户端实现智能中继,smtp,sendmail,emailrelay,Smtp,Sendmail,Emailrelay,我需要在Linux上实现一个智能邮件列表/中继。其想法是: 服务器接收发送到列表地址的电子邮件 它解析邮件,并确认邮件来自可信来源 它在本地数据库中查找收件人列表 它对收到的邮件进行一些小的处理,并将其发送到列表中 它将所有跳出消息返回给原始发件人 服务器已安装sendmail,但如有必要,我可以使用其他MTA 这听起来很简单,sendmail已经具备了数据库查找功能。但是,我认为这不是特别灵活,我不想让sendmail独立访问我的数据库 最接近现有解决方案的是,它看起来不错,但如果可以避免的话

我需要在Linux上实现一个智能邮件列表/中继。其想法是:

服务器接收发送到列表地址的电子邮件 它解析邮件,并确认邮件来自可信来源 它在本地数据库中查找收件人列表 它对收到的邮件进行一些小的处理,并将其发送到列表中 它将所有跳出消息返回给原始发件人 服务器已安装sendmail,但如有必要,我可以使用其他MTA

这听起来很简单,sendmail已经具备了数据库查找功能。但是,我认为这不是特别灵活,我不想让sendmail独立访问我的数据库

最接近现有解决方案的是,它看起来不错,但如果可以避免的话,我不希望集成它的开销

我希望在开始B计划之前对其进行一次理智的检查,或者提出其他建议。我还没有找到任何有用的文档,而且Sendmail手册中似乎没有任何相关内容

我想的是:

为sendmail实现SMTP传递代理,让sendmail和DA在同一台服务器上运行,DA在某个未指定的端口上侦听哪个? Sendmail可能在连接到DA时充当SMTP客户端,my DA将响应MAIL/RCPT/DATA命令 DA处理收到的邮件,这些邮件要么是发送到邮件列表的消息,要么是跳转,或者可能是响应 DA然后切换到客户端模式,连接到sendmail,并发出MAIL/RCT/DATA命令将响应返回给原始发件人
这有意义吗?谢谢。

这非常简单,尽管我没有使用sendmail传递代理-我只是用SMTP做了所有事情。服务器有两个IP地址,sendmail已在IP1上的端口25上侦听

我编写了一个SMTP代理,它监听IP2上的端口25。这将运行一个SMTP服务器,该服务器接受传入消息并重新写入它们。然后,它作为客户端连接到IP1上的端口25,将重新写入的消息发送到sendmail。然后,sendmail处理到重新写入的目标地址的传输。这对原始邮件客户端是完全透明的


如果服务器只有一个IP地址,我不知道该怎么做。

为什么要重新实现这个?您正在描述Sendmail别名。如果你想开发一些新的东西,我建议用一个现代的MTA后缀来代替。@tripleee:我认为这比别名更通用。我可以使用:include:为列表地址添加别名,但它只引用了一个静态文件,我需要从自己的数据库中单独维护该文件。我无法处理邮件。或者我可以将via |别名为一个外部程序,但这只会使用stdin上的传入邮件执行该程序,然后我必须使用响应执行sendmail。那将是毫无意义的-当然最好设置一个套接字?此外,如果我在套接字上谈论SMTP,我有一个完全通用的解决方案,与sendmail无关。你在这方面做得太过火了。现有的邮件列表管理器做得很好。请看@tripleee:我在过去运行过几个邮递员列表,它们都是PITA。再说,这不是我要找的。我有一个基于MySql数据库的webapp,列表地址会随着数据库内容的变化而频繁变化。邮递员本质上是静态的。正如我所说,我还必须处理传入的消息,而不仅仅是将它们转发到列表中。使用一个IP地址实现这一点相当简单:因为其中一个sendmail服务器将只侦听应用程序提交的消息,所以您可以让它在非默认端口上侦听。