在发送之前通过脚本来管理 Exim 的外发电子邮件?

在发送之前通过脚本来管理 Exim 的外发电子邮件?

我运行一个 cPanel 服务器。该服务器最近被入侵,并被发送垃圾邮件,所以我想跟踪 Exim 发送的每封电子邮件。

是否可以让 Exim 在将电子邮件放入队列之前运行脚本?

我想让 Exim 将“发件人:”标头发送到 Python 脚本。此脚本将跟踪该域在 1 小时内发送了多少封电子邮件,并允许发送电子邮件或阻止 cPanel 帐户。

我曾尝试使用和来执行此操作transport_filtersystem_filter但无法成功。

如何让 Exim 将外发电子邮件发送到 Python 脚本进行处理?

答案1

最简单的方法是制作一些路由器来检查已提交邮件的标头。如果那里没有一些特殊的标头(如 X-Spam-My-Approval),则邮件将路由到带有管道的传输。管道另一端的脚本将执行所有神奇的操作,并将秘密标头添加到邮件中,然后再次提交。现在路由器将其传递给带有 SMTP 驱动程序的传输。

begin routers
pass2script:
  driver    = accept
  transport = myscript
  domains   = !+local_domains
  condition = ${if ! eq{$header_X-Spam-My-Approval:}{YES}} # header is absent or not "YES"

passaway:
  driver    = accept
  transport = relay
  domains   = !+local_domains
  condition = ${if eq{$header_X-Spam-My-Approval:}{YES}}

适当的传输应该是这样的:

begin transports
myscript:
  driver  = pipe
  command = /path/to/script --option1 --option2

relay:
  driver  = smtp
  headers_remove = X-Spam-My-Approval
  . . . . . .

请记住,exim 应该具有足够的权限来运行该脚本,并且脚本应该在 exim 的trusted_users配置行中列出适当的 EUID,以便能够作为任意发件人提交消息。

相关内容