我按照 postfix 网站上的说明进行操作如何设置内容过滤器,我很快就让这个简单的例子运行起来,但经过长时间的努力,我还是无法让高级过滤器正常工作。
我按照示例设置了所有内容,smtp 在端口 25 上侦听未过滤的消息,它有一个过滤器设置为将消息传递到调用过滤器脚本的端口 10025,另一个 smtp 侦听器在端口 10026 上侦听已过滤的消息。
在这个简单的例子中,脚本是消息流的最后一站,它通过标准输入获取消息并执行其工作,然后使用 sendmail 重新注入它。
在高级示例中,我似乎没有收到消息,也无法将其传递下去。我成功地返回了“550 内容被拒绝”响应。
我想我的问题是脚本如何接收邮件正文以及如何将其返回到邮件队列?以及如何让一切正常工作?
主配置文件:
content_filter = scan:localhost:10025
主配置文件:
scan unix - - n - 10 smtp
-o smtp_send_xforward_command=yes
-o disable_mime_output_conversion=yes
-o smtp_generic_maps=
localhost:10025 inet n n n - 10 spawn
user=filter argv=/home/omri/filter.sh localhost 10026
localhost:10026 inet n - n - 10 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
# Postfix 2.10 and later: specify empty smtpd_relay_restrictions.
-o smtpd_relay_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
答案1
在本节中简单内容过滤器示例,您可以使用管道(例如 stdin)接收邮件正文。在先进的,您的脚本必须能够同时充当 SMTP 服务器和 SMTP 客户端。
- 作为 SMTP 服务器,postfix 将使用 SMTP 向脚本发送电子邮件。因此,您的脚本必须自行处理 SMTP 事务。Spawn 进程不会为您执行此操作,而是将其作为 inetd 进行处理。
- 作为 SMTP 客户端,您的脚本也将通过 SMTP 事务将电子邮件发回 postfix localhost:10026。
该页面的片段。
第二个示例更为复杂,但可以提供更好的性能,并且当机器遇到某些资源问题时,不太可能退回邮件。此内容过滤器通过本地主机端口 10025 使用 SMTP 接收未经过滤的邮件, 和将过滤后的邮件通过 SMTP 在本地主机端口 10026 上发送回 Postfix。
对于不支持 SMTP 的内容过滤软件,Bennett Todd 的 SMTP 代理实现了一个不错的 PERL/SMTP 内容过滤框架。请参阅:http://bent.latency.net/smtpprox/。