Sed
Procmail - 用電子郵件中的文本替換 From
我正在嘗試使用 Procmail 過濾進入 WHMCS 中我的票務通道的郵件。就管道而言,它工作正常。但是來自站點上 Zopim 實時聊天模組的電子郵件需要過濾和編輯,然後才能進入 WHMCS 腳本。
他們進來的電子郵件是這樣的:
To: email@domain.com From: Zopim <noreply@zopim.com> Subject: Offline Message from Visitor xxxx: xxx From: Visitor xxxxxx <you@you.com> URL: http://www.domain.com xxxxxxx ---- Zopim http://www.zopim.com
這是我的 procmail rc 文件設置:
:0H * ^From: Zopim.*noreply@zopim.com | sed -e 's/^From: Zopim.*/From: me@me\.com/' | /usr/bin/php -q /var/www/pipe/pipe.php
現在,它工作正常,它正在查找該
From
欄位並將其替換為me@me.com
. 問題是我想以某種方式從電子郵件中獲取文本:From: Visitor xxxxxx <you@you.com>
並將其放在上面的標題中
From
,因此本質上它將來自訪問者而不是 zopim。這就是我的問題所在,我無法弄清楚使用 sed 或其他程序如何將該行設置為變數並在上面替換它,或者只是使用 sed 來移動行。
假設這些電子郵件真的很正常,因此
From:
正文中的第一個始終包含您要提取的地址,請嘗試以下操作::0 # The H flag is the default, so not specifying it explicitly * ^From: Zopim.*<noreply@zopim\.com> { :0B # examine body only, capture From: * ^From: \/[^ ].*$ { VISITOR=$MATCH } :0 | formail -I "From: $VISITOR" \ | /usr/bin/php -q /var/www/pipe/pipe.php }
傳統上,正則表達式應該涵蓋製表符以及空格中的空格,但我想如果您的輸入是機器生成的,它將是所有空格(或所有製表符,在這種情況下您需要進行必要的編輯)。