如何配置exim以为每封电子邮件运行脚本

时间:2017-08-30 07:40:02

标签: smtp exim exim4

我需要在exim下运行一个shell脚本,它可以读取每个传入的电子邮件,可以选择重写它们,然后继续发送电子邮件。

理想的解决方案类似于UNIX管道:

cat *incoming email* | **some-script.sh** | *back to exim processing*

我希望脚本能够尽早运行,以便我可以更改目标地址。

这是否可以与Exim一起使用,以及如何实现?

1 个答案:

答案 0 :(得分:0)

您可以在管道的另一侧使用脚本创建使用管道传输的路由器:

begin routers
preprocessor:
    driver      = accept
    condition   = if{ !eq{$header_X-Preproceeded}{yes}}
    transport   = myscript
    no_more

. . . . .

begin transports
myscript:
    driver      = pipe
    user        = scriptowner
    command     = /path/to/script --opt1 --opt2

如果传入的消息没有X-Preproceeded标头或其值未设置为yes,则消息将传递到myscript传输。这是通过管道source | script执行的,所有消息都传递给脚本stdin。如果您想继续将已继续的消息返回到exim,则应该在消息中添加x-Preproceeded: yes标题以防止它被路由到下一圈。然后你必须通过sendmail命令提交它。

#!/bin/sh
. . . . 
mandatory_empty_line = ''
cat << ENDOFTEXT | /usr/sbin/sendmail -t
$headers
X_Preproceeded: yes
$mandatory_empty_line
$message_body
ENDOFTEXT

请记住,exim的配置应该将有效的用户运行脚本添加到受信任的用户,以允许从任意地址发送。否则,exim会将scriptowner@mydomain.tld

替换为任何发件人的地址
相关问题