【发布时间】:2014-11-30 17:04:59
【问题描述】:
我有以下场景:
GNU/Linux 机器上的 SMTP 服务器正在接受邮件。接受的邮件正在发送到 procmail 以进行进一步处理。这是我的 .procmailrc:
VERBOSE=yes
LOGFILE=$HOME/procmail.log
SUBJECT=`formail -xSubject: | tr -d '\n' | sed -e 's/^ //' | /usr/bin/perl -MEncode -ne 'print encode ("utf8",decode ("MIME-Header",$_ )) '`
FROM=`formail -rt -xTo:`
DATE=`formail -xDate:`
BODY=`formail -I ""`
:0fbW
* ^From.*some_special_name@special_server.com
| echo "FROM:$FROM" > $HOME/res.txt; \
echo "DATE:$DATE" >> $HOME/res.txt; \
echo "SUB:$SUBJECT" >> $HOME/res.txt; \
echo "BODY:" >> $HOME/res.txt; \
echo $BODY >> $HOME/res.txt; process.py
这个小脚本首先创建一个本地文件 $HOME/res.txt,然后启动另一个名为 process.py 的脚本。现在,$HOME/res.txt 填充了以下条目:
FROM:some_special_name@special_server.com
DATE:Mon, 06 Oct 2014 13:14:32 +0200
SUB:Some subject
BODY:
This is a multi-part message in MIME format. --------------030006020609010705060803 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, Some kind of long tekst where I cannot see the line feed chars nor any other control chars...
正文包含没有正文原始格式的原始字符串。我的意思是过滤掉 \n 或 \t 字符。 process.py 脚本要求消息的正文部分保持电子邮件消息的原始格式。
我怎样才能做到这一点?
【问题讨论】:
-
您可以使用
formail -zxSubject:使sed部分变得不必要。