如何使用 exim4 收到邮件后运行命令?

如何使用 exim4 收到邮件后运行命令?

每次将新邮件发送到虚拟邮箱时,我可以在哪里告诉 exim 运行 shell/php 命令。邮件发送给哪个用户并不重要?

答案1

你想看看shadow_transport

对于本地传送(仅限),如果传送成功且传输在其shadow_transport选项中引用另一个传输,则第二个传输也将被调用。

然后你就会让第二个 Transport 成为一种driver = pipe传输。

例如:

maildir_delivery:
  driver = appendfile
  directory = ...blah blah whatever ...
  maildir_format
  # various other maildir extension options if needed
  shadow_transport = audit_delivery

audit_delivery:
  driver = pipe
  command = /some/path/to/some/command with some options
  user = audituser
  group = mail

答案2

假设您显然有一个真正的用户需要传递信息,您可能需要考虑使用文件.forward,或者如果您想要更花哨一点的话,可能需要使用 procmail(例如,如果您只想运行针对传递给用户的一部分消息的命令)。

答案3

我发现最简单的方法是创建一个新的路由器,然后将其传递给本地用户,其中包含:

runscript:
        driver = accept
        transport = run_script
        unseen
        no_expn
        no_verify

因此,邮件仍然按应有的方式处理,并且我的脚本正在运行,并具有正确的传输功能:

run_script:
        debug_print = "T: run_script for $local_part@$domain"
        driver = pipe
        path = "<path>"
        command = "<command to be run>"

相关内容