[英]How to put some text into procmail forwarded e-mail?
幾天來,我一直在嘗試編寫procmail腳本。
我想轉發消息,並在消息內容中注入一些文本。
我要完成的工作:
但是到目前為止,還沒有成功。
在.procmail.log
,有一條消息“ procmail:缺少操作”
SHELL=/bin/bash
VERBOSE=off
LOGFILE=/home/test/.procmail.log
LOGDATE_=`/bin/date +%Y-%m-%d`
:0
* ^Subject:.*weather
:0 bfw
| echo "This is injected text" ; echo "" ; cat
:0 c
! mymail@somedomain.com
當我查看電子郵件源時,我看到該文本已被注入。 但是這個地方錯了...
看一看:
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="------------148F3F0AD3D65DD3F3498ACA"
Content-Language: pl
Status:
X-EsetId: 37303A29AA1D9F60667466
This is injected text
This is a multi-part message in MIME format.
--------------148F3F0AD3D65DD3F3498ACA
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
CONTENT CONTENT CONTENT
*********************************************************
插入的文本應放置在內容所在的位置。 現在在上面...
您無需解釋代碼,但看起來您正在嘗試在單個條件下使用多個操作。 為此使用括號。
:0
* ^Subject:.*weather
{
:0 bfw
| echo "This is injected text" ; echo "" ; cat
:0 c
! mymail@somedomain.com
}
總結一下,每個配方都必須有一個標題行( :0
和可能的標志)和一個動作。 條件是可選的,並且可以有多個。 進一步的配方塊是一種操作形式,因此可以滿足這些要求(其他操作類型是保存到文件夾,傳遞到命令或轉發到電子郵件地址)。
要將文本插入多部分郵件的第一個MIME主體部分的頂部,您需要進行一些MIME解析。 不幸的是,Procmail沒有對MIME的顯式支持,但是如果您知道傳入的消息將始終具有特定的結構,則可能會遇到一些非常簡單的事情。
:0
* ^Subject:.*weather
{
:0fbw
* ^Mime-version: 1\.0
* ^Content-type: multipart/
| awk '/^Content-type: text\/plain;/&&!s {n=s=1} \
n&&/^$/{n=0; p=1} \
1; \
p{ print "This is injected text.\n"; p=0 }'
:0 c
! mymail@somedomain.com
}
正文(包含所有MIME正文部分以及其標頭和所有內容)被傳遞到一個簡單的Awk腳本,該腳本在第一個text/plain
MIME正文部分標頭之后(我們樂觀地假設是)找到第一個空行,並且在此處注入文字。 (Awk區分大小寫,因此可能需要對正則表達式文本進行改編或概括,並且我假設輸入消息中的空格是完全規則的。對於生產系統,這些簡化的假設是不現實的。)
如果您需要完全的MIME支持(例如,輸入消息可能是也可能不是,或者不是多部分的,或者包含嵌套的多部分),我的建議是使用某種現代的腳本語言,使用適當的MIME支持庫來編寫注入代碼; 我仍然會選擇Python,盡管它仍然(即使在3.6中的email
庫更新之后)仍然有點笨拙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.