我们有一个反垃圾邮件系统,有时会产生误报。报告后,我们会验证并列入被错误触发的域或 IP 的白名单。但是,我想通过编写一个脚本来自动执行此操作,该脚本在我们的服务器上有人发送消息时执行以下操作:
-> 如果发件人托管在我们的服务器上 -> 获取发件人和收件人 -> 输入命令“spfbl superwhite add”[电子邮件保护]>[电子邮件保护]“”。
系统仅过滤托管在我们的 cPanel 服务器上的发件人非常重要(因此我们可以使用 /etc/localdomains 文件).. 但我不知道如何启动它。
有人有主意吗?
非常感激。
更新
我已经使用 kondybas 提供的脚本做了一些更改来做到这一点:
Section: PREROUTERS
whitelister:
driver = accept
domains = !+local_domains
condition = ${if match_domain{$sender_address_domain}{+local_domains}}
transport = whlist
no_more
-
Section: TRANSPORTSTART
whlist:
driver = pipe
command = /var/spool/exim/autoWH $local_part@$domain
/var/spool/exim/autoWH 文件:
#!/bin/sh
# Debug:
echo "Args recebidos: \$1 = $1" >> /var/spool/exim/log-transport.log
# Magica:
/var/spool/exim/spfbl.sh white sender $1
####
所有内容都在 exim 拥有的文件夹中,因此我没有权限问题。
哎呀。问题:使用这些参数,exim 无法投递邮件,因为它试图进行本地投递:本地投递失败
答案1
只需像这样添加路由器和传输:
begin routers
whitelister:
driver = accept
domain = !+local_domains
condition = ${if inlist{$sender_address_domain}{+local_domains}}
transport = whlist
unseen
和运输:
begin transports
whlist:
driver = pipe
command = spfbl superwhite add "$address_data > $sender_address_data"
更新
更好的方法是调用一些 shell 脚本,而不是直接调用实用程序。至少你不必在exim
每次修改脚本时重新启动:
begin transports
whlist:
driver = pipe
command = /path/to/script $address_data $sender_address_data
那么脚本应该是这样的:
#!/bin/sh
# Debugging info:
echo "Received args are: \$1 = $1 and \$2 = $2" >> /path/to/transport.log
# The magic:
/path/to/spfbl superwhite add "$1 > $2"
####