我想使用 Postfix 接受传入的电子邮件并将它们发送到外部 Python 脚本,该脚本解析它们并将它们添加到数据库中。
我读到这可以通过策略文件来完成。
我的第一个问题是策略文件应该返回什么以使 Postfix 从队列中删除电子邮件,并向发件人发送成功消息。
我的第二个问题是我可以使用策略文件来验证客户端发送的 SMTP 身份验证吗?如果没有,有没有办法让它使用外部脚本来验证登录?
谢谢!
- 基督教
我想使用 Postfix 接受传入的电子邮件并将它们发送到外部 Python 脚本,该脚本解析它们并将它们添加到数据库中。
我读到这可以通过策略文件来完成。
我的第一个问题是策略文件应该返回什么以使 Postfix 从队列中删除电子邮件,并向发件人发送成功消息。
我的第二个问题是我可以使用策略文件来验证客户端发送的 SMTP 身份验证吗?如果没有,有没有办法让它使用外部脚本来验证登录?
谢谢!
如果您仍然需要 SMTP 身份验证并且只希望脚本充当MDA,我认为您可以通过设置和配置身份验证方案mailbox_command = /path/to/my/script
来简单地做到这一点。/etc/postfix/main.cf
如果您也dovecot
正在运行,我建议您postfix
通过进行身份验证dovecot
,这在 SASL 身份验证方面是非常可配置的。
由于您将通过网络获得明文密码(假设可以从网络访问此服务),我建议仅允许通过加密线路进行身份验证。我将要展示的配置仍将接受以服务器为目的地的邮件,无需身份验证。据我所知,该行为是由 RFC 规定的,用于可从 Internet 访问的 SMTP 服务器。
仅通过加密连接宣布 SASL 身份验证
smtpd_tls_auth_only=yes
不要要求每个人都通过加密频道与您交谈
smtpd_tls_security_level=may
SASL 样板
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $mydomain
为谁接受邮件。这是从左到右进行的,直到遇到允许或拒绝规则。后备行为将是允许的。
smtpd_recipient_restrictions = permit_auth_destination, reject_plaintext_session, permit_sasl_authenticated, reject
permit_auth_destination
作为第一条规则,将确保客户可以将邮件发送给我认为未经身份验证的用户。客户端可以选择是否使用 TLS。reject_plaintext_session
作为第二条规则,确保所有其他规则都可以采用加密通道。permit_sasl_authenticated
不言自明reject
最后一条规则基本上将默认策略更改为“拒绝”。如果您不想接受没有 SMTP 身份验证的邮件,您可能需要删除smtpd_recipient_restrictions
.
Not shown is the configuration of the SSL certificate and how to tell postfix about it (the latter of which is easy).