我正在尝试弄清楚电子邮件代理通常是如何工作的。我想展示我所看到的架构,如果有人能解释我的哪些假设是有缺陷的以及我遗漏了什么,我将非常高兴。
假设我已经购买了一个电子邮件域名,比方说example.com
,现在我想代理到达我的域名的所有电子邮件,对它们进行一些计算,然后根据计算结果删除电子邮件或将其转发到目的地。
- 我将更改
MX
记录以example.com
到达我的电子邮件代理服务器,该服务器将通过一些公共 IP 或域提供 - 现在所有电子邮件都到达我的代理服务器,然后我可以编写一些自定义代码,分析电子邮件并删除它或决定转发
- 现在我不清楚的是,我该如何转发电子邮件?我是否只能用相同的发件人和收件人重新发送?那么显然我将无法通过目标服务器上的身份验证,因为我不允许从每个可能的域发送电子邮件。
我的理解是,我应该以某种方式通过 IP 或域名将我的代理列入电子邮件目的地的白名单?基本上是为了允许从我的代理发送的电子邮件绕过身份验证?
这就是我尝试做的:
发送电子邮件时,我需要指定 SMTP 服务器和端口,如果我要转发电子邮件,这应该是发件人 SMTP 服务器还是收件人 SMTP 服务器?如果是,我该如何跳过目的地的发件人身份验证?
作为一个小型 POC,我尝试从我的个人 Gmail 向我的个人 Outlook 发送未经身份验证的电子邮件,因此我通过发送电子邮件,
smtp.office365.com:587
并在 Outlook 端将发送电子邮件的机器的 IP 列入白名单,但它没有奏效。我失败了:
could not send email 1: 530 5.7.57 Client not authenticated to send mail. [VI1P194CA0052.EURP194.PROD.OUTLOOK.COM]"
任何帮助都值得感激。此外,如果有人熟悉一些允许注入自定义代码进行处理的现有解决方案,我们将非常高兴。
答案1
服务器端传入邮件反垃圾邮件过滤 [milter]
传入邮件反垃圾邮件过滤的标准建议要求在 SMTP 会话中进行过滤。“归类为垃圾邮件”的邮件在回复“最后一个点”(邮件传输结束)时被拒绝甚至更早. 它可以让发送者在出现误报的情况下意识到这一点,但它避免承担发送退回消息(通过电子邮件发送通知)的责任。
您可以使用milter 扩展获得此类功能。Sendmail、Postfix 和其他 SMTP 服务器均支持 Milters。
您可以使用MIME去方milter 快速获得“工作原型”。MIMEDefang 使用 Perl 脚本进行过滤,因此您可以(最初)简单地从 Perl 脚本调用您的程序。MIMEDefang 可作为 Debian-Linux 软件包使用(这通常意味着在许多 Linux 发行版上可用)。