Sed

Procmail - 用電子郵件中的文本替換 From

  • July 22, 2013

我正在嘗試使用 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
}

傳統上,正則表達式應該涵蓋製表符以及空格中的空格,但我想如果您的輸入是機器生成的,它將是所有空格(或所有製表符,在這種情況下您需要進行必要的編輯)。

引用自:https://serverfault.com/questions/524766