2015-02-26 7 views
0

Я нашел проблему, Munpack будет на всякий случай, если у меня есть одна почта в моем текстовом файле почтового ящика. Если у меня больше, чем этот munpack не будет работать.Какая альтернатива munpack (MIME-кодированное почтовое сообщение)?

Может ли кто-нибудь сказать мне об альтернативе того же?

ответ

1

У меня была та же проблема. Я пытался помочь себе со стандартными инструментами Unix. Я сделал небольшой скрипт bash, который идеально подходит для моих нужд. Я не программист, программист, возможно, сделает это по-другому. Просто посмотрите и не стесняйтесь изменять/улучшать сценарий. Комментарии приветствуются! (для улучшения моего программирования bash :-)

#!/bin/bash 
    #Script extracts attachments out of a "ASCII" email file. 
    # Using grep, head, tail and openssl. 
    # Start of a attachment looks like this in the file: 
    # 
    #--Part_0_1323333549.1457526416376 
    #Content-Type: application/octet-stream; 
    # name="testfile.zip" 
    #Content-Transfer-Encoding: base64 
    #Content-Disposition: attachment; filename="testfile.zip" 
    # 
    #UEsfBBQACAAIAAg4fEYAAAAAAAdAAAAAAAAeAAAAQWJsZWhugW5nZW5fQ0RDXzIwMTUtMDMtMjgu 
    #... 
    #... 
    # 
    # End of a attachment looks like this: 
    #AAAAAAAAAEFibGVobnVuZ2VuX0NEQ18yMDE1LTAzLTI3LmNzdlBLBQYAAAAAAQABAEwAAACrTwIA 
    #AAA= 
    # 
    #--Part_0_1323333549.1457526416376 
    # 

    timestamp=$(date +20%y-%m-%d_%H-%M-%S) 
    mailpath=~/mail 
    mailfile=$mailpath/mails 
    tmpfile=$mailpath/tmpfile.txt 
    tmpfile2=$mailpath/tmpfile2.txt 
    outfile=$mailpath/outfile.txt 

    # fetchmail (MTA=Mail Tranfer Agent) connects to mail-server and routes mails to procmail (MDA=Mail Delivery Agent) 
    # Configuration ~/.fetchmailrc und ~/.procmailrc 
    fetchmail 

    cp $mailfile $tmpfile 

    # Get NB of all attachments in one or n emails. Option -c in grep (all emails are in $mailfile resp. $tmpfile!) 
    # to set loops 
    nbattach=$(grep -ci 'content-disposition: attachment; filename=' $tmpfile) 

    i=1 
    while [ $i -le $nbattach ] 
    do 

     echo $i. run 
     #get filename of 1. attachments in remaining $tmpfile --> option -m 1 in grep! 
     filename=$(grep -ni 'content-disposition: attachment; filename=' $tmpfile -m 1 | cut -d ';' -f 2 | cut -d '=' -f 2 | sed 's/"//g') 
     echo filename: $filename 

     #get startline of 1. attachments in remaining $tmpfile--> option -m 1 in grep 
     startline=$(grep -ni 'content-transfer-encoding: base64' $tmpfile -m 1 | cut -d : -f 1) 

     #attachment starts after a blank line 
     let startline=$startline+1 

     #keep tail in $tmpfile 
     tail -n +$startline $tmpfile > $tmpfile2 
     mv $tmpfile2 $tmpfile 

     #get endline of the 1. attachment in remaining $tmpfile 
     #attachment ends with a blank line and a string that begins with '--' 
     endline=$(grep -n '^--' $tmpfile -m 1 | cut -d ':' -f 1) 
     let endline=$endline-1 

     #keep head and decode attachment with base64 via openssl. 
     head -n $endline $tmpfile > $outfile 
     openssl enc -d -base64 -in $outfile -out ~/mail/attachments/${timestamp}_${i}_${filename} 

     # keep tail for further attachemnts 
     let endline=$endline+2 
     tail -n +$endline $tmpfile > $tmpfile2 
     mv $tmpfile2 $tmpfile 

     let i=$i+1 
    done 
    rm $tmpfile $outfile