Parse a mailbox using mailx and bash scripts

I am trying to automate a certain part of my work using email. Is there any method already available with mailx and bash that I can use to extract the body of the message?

+4
source share
2 answers

If it is mail sent to the local user account using MTA using sendmail, you can use procmail to analyze the email as it arrives.

On the system I used, sendmail examined the ~/.forward file, so I had it in ~ username / .forward

 # pipe incoming mail to procmail # ref: http://www.panix.com/~elflord/unix/procmail.html # ref: http://porkmail.org/era/procmail/mini-faq.html#forward "|IFS=' ' && p=/usr/local/bin/procmail && test -x $p && exec $p -f- || exit 75 #username" 

Then ~username/.procmailrc contains:

 # procmail tutorial: http://tldp.org/LDP/LG/issue14/procmail.html PATH=/usr/local/bin:/bin:/usr/bin MAILDIR=$HOME/Mail DEFAULT=$HOME/Mail/inbox LOGFILE=$HOME/procmail.`date +%Y-%m`.log SHELL=/usr/bin/ksh MY_XLOOP='X-Loop: username@hostname.subdomain.example.com ' MY_RECIPIENT=' mailing.list@example.com ' ############################################################################# # if the email comes from the client with a specific Subject, # send a copy of the message to the processing script, and # carry on with the next recipe :0c * ^From:.*@clientdomain\.invalid * ^Subject:.*Account.*(Request|Access|Approval) | $HOME/bin/process_account_request_email.pl | \ mailx -s "Account request results" $MY_RECIPIENT ############################################################################# # forward all mail to mailing list :0 * ! ^$MY_XLOOP { # add a header # 'f' = filter: pass message to program and continue processing results # 'h' = pass message headers to program # 'w' = wait for program to return :0fhw | formail -A "$MY_XLOOP" # then forward the message # 'c' = send a copy to recipient and continue processing :0c ! $MY_RECIPIENT } # if we get here, then the message has an X-Loop header. # let it fall into $DEFAULT 
+2
source

formail from the procmail package does the job well, as indicated in another answer, but here is a summary of what I consider to be a direct answer to the question:

 $ sudo apt-get install procmail $ cat test.eml | formail -x To test@mydomain.com $ cat test.eml | formail -x Subject hello $ cat test.eml | formail -x Content multipart/alternative; boundary="f403043eea78e8658a0554677278" 
+1
source

All Articles