Smtp 如何配置exim为每个电子邮件运行脚本

Smtp 如何配置exim为每个电子邮件运行脚本,smtp,exim,exim4,Smtp,Exim,Exim4,我需要在exim下运行一个shell脚本,它可以读取每个传入的电子邮件,可以选择重写它们,然后继续发送电子邮件 理想的解决方案类似于UNIX管道: cat *incoming email* | **some-script.sh** | *back to exim processing* 我希望脚本尽早运行,这样我就可以更改目标地址 Exim是否可以实现这一点,以及如何实现这一点?您可以使用管道另一侧的脚本创建使用管道传输的路由器: begin routers preprocessor:

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

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

cat *incoming email* | **some-script.sh** | *back to exim processing*
我希望脚本尽早运行,这样我就可以更改目标地址


Exim是否可以实现这一点,以及如何实现这一点?

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

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-preprocessed
标头,或者其值未设置为
yes
,则消息将传递到
myscript
传输。这是通过管道
source | script
执行的,所有消息都传递到脚本的
stdin
。继续后,如果您想将继续发送的消息返回exim,则应在消息中添加
x-preprocessed:yes
标题,以防止消息被发送到下一圈。然后您必须通过
sendmail
命令提交它

#!/bin/sh
. . . . 
mandatory_empty_line = ''
cat << ENDOFTEXT | /usr/sbin/sendmail -t
$headers
X_Preproceeded: yes
$mandatory_empty_line
$message_body
ENDOFTEXT
#/垃圾箱/垃圾箱
. . . . 
强制\u空\u行=“”
猫