Exim 脚本输出发送方和接收方

Exim 脚本输出发送方和接收方

我们有一个反垃圾邮件系统,有时会产生误报。报告后,我们会验证并列入被错误触发的域或 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"
####

相关内容