我想使用Postfix来接收传入的电子邮件,并将它们发送到外部Python脚本,该脚本会解析它们并将它们添加到数据库中。
我读到这可以通过策略文件来完成。
我的第一个问题是策略文件应该返回什么,以便Postfix从队列中删除电子邮件并向发件人发送成功消息。
我的第二个问题是我可以使用策略文件来验证客户端发送的SMTP身份验证吗?如果没有,有没有办法让它使用外部脚本来验证登录?
谢谢!
答案 0 :(得分:1)
如果您仍然需要SMTP身份验证并且只想让脚本充当MDA,我认为您可以通过简单地执行此操作
在mailbox_command = /path/to/my/script
中设置/etc/postfix/main.cf
并配置身份验证方案。如果您dovecot
也在运行,我建议您通过postfix
进行dovecot
身份验证,这在SASL身份验证方面非常易于配置。
由于您将通过网络获得明文密码(假设可以从网络访问此服务),我建议仅允许通过加密线路进行身份验证。我将要显示的配置仍将接受服务器未经身份验证的目的地的邮件。据我所知,这种行为是由可以从互联网上访问的SMTP服务器的RFC强制实施的。
仅通过加密连接宣布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
的第一条规则。
未显示SSL证书的配置以及如何告诉postfix(后者很容易)。