2017-08-30 78 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]

相關問題