使用bash仅提取传入电子邮件的正文部分

时间:2016-03-23 01:24:54

标签: bash maildir

我使用offlineimap将邮件提取到Maildir文件夹中。

我想自动解析Maildir文件夹中的所有新收到的电子邮件,并仅将“from”,“subject”和“body”作为即时消息发送到其他地方。

所以我尝试用

处理所有邮件
MPATH=~/Mail 

if [ -n "$(ls "$MPATH/INBOX/new/")" ]; then 
    for f in "$MPATH/INBOX/new/"*; do  
        SUB="$(cat "$f"|grep '^Subject' | head -n1 | sed "s/Subject: //g")"                                                                                       
        FROM="$(cat "$f" | grep '^From' | head -n1 | head -n 1|sed "s/From: //g")"                                                                                
        BODY="$(cat "$f"|sed -e '1,/Content-Transfer-Encoding/d')"
        MESS="$FROM: $SUB$BODY"

        echo $f 
        echo "$MESS" 
        mv "$f" "$MPATH/INBOX/cur/" 
    done 
fi

这已经适用于一些简单的电子邮件,但我如何摆脱不是简单的身体的一切,如签名,附件,......?

2 个答案:

答案 0 :(得分:1)

按照 formail 联机帮助页上的建议,这对我有用:

cat mailfile | sed -e '1,/^$/ d' 

答案 1 :(得分:0)

正如评论中所回答的那样,来自formail软件包的procmail似乎可以很好地完成这项工作:

$ sudo apt-get install procmail

$ cat test.eml | formail -x To
 test@atleticomadridhistory.com

$ cat test.eml | formail -x Subject
 hello

$ cat test.eml | formail -x Content
 multipart/alternative; boundary="f403043eea78e8658a0554677278"

致谢:@glennjackman