2017-08-30 76 views
0

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

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

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

我希望脚本很早就跑,这样我就可以例如改变目的地址。

Exim有可能吗?

回答

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将取代任何发件人的地址[email protected]

相关问题