jaromail

a commandline tool to easily and privately handle your e-mail
git clone git://parazyd.org/jaromail.git
Log | Files | Refs | Submodules | README

commit 5b11ebf621c8000422cfd935a35333cf25a109c4
parent a3e106f541eec2d9700695ce20378e13463fcb12
Author: Jaromil <jaromil@dyne.org>
Date:   Tue, 29 May 2012 16:58:09 +0200

several fixes and testing to production usage

Diffstat:
Mbuild-gnu.sh | 6+++---
Msrc/jaro | 48+++++++++++++++++++++++++++++-------------------
2 files changed, 32 insertions(+), 22 deletions(-)

diff --git a/build-gnu.sh b/build-gnu.sh @@ -20,11 +20,11 @@ case $distro in echo -n "Compiling a few sources... " cd src/lbdb echo -n "dotlock " - [ -x dotlock ] || gcc -O2 -static -o dotlock dotlock.c + [ -x dotlock ] || gcc -Os -static -o dotlock dotlock.c echo -n "fetchaddr " [ -x fetchaddr ] || \ - gcc -O2 -c -static fetchaddr.c helpers.c rfc2047.c rfc822.c; \ - gcc -O2 -static -o fetchaddr fetchaddr.o helpers.o rfc2047.o rfc822.o; + gcc -Os -c -static fetchaddr.c helpers.c rfc2047.c rfc822.c; \ + gcc -Os -static -o fetchaddr fetchaddr.o helpers.o rfc2047.o rfc822.o; cd - > /dev/null echo # echo "gnome-keyring" diff --git a/src/jaro b/src/jaro @@ -30,7 +30,7 @@ for arg in ${argv}; do OLDARGS+=($arg); done # declare global variables QUIET=0 -DEBUG=1 +DEBUG=0 DRYRUN=0 @@ -538,11 +538,12 @@ EOF fi act "please wait while downloading mails..." - ( sleep 2; ${=rm} $WORKDIR/tmp/$host.fetch ) & - fetchmail -f $WORKDIR/tmp/$host.fetch + cat $WORKDIR/tmp/$host.fetch | fetchmail -f - + # TODO: substitute this with cat conf | fetchmail -f - + # to avoid writing the password in clear on filesystem total=`mailstat -k $WORKDIR/log/procmail.log | tail -n1 | awk '{print $2}'` - briefing=`mailstat -kt $WORKDIR/log/procmail.log |awk '!/procmail/ { print " . " $2 "\t" $3 }'|sort -nr` + briefing=`mailstat -kt $WORKDIR/log/procmail.log |awk '!/procmail/ { print " " $2 "\t" $3 }'|sort -nr` notice "$total emails fetched" echo "${briefing}" done @@ -601,18 +602,19 @@ EOF unset password for mail in `find $MAILDIRS/outbox -name "*.mail"`; do - act "`cat ${mail} | grep '^To:'`" smtp=`echo ${mail} | sed -e 's/mail/msmtp/'` - msmtp -C $WORKDIR/tmp/$host.send "`cat ${smtp}`" < "${mail}" + recipients="`cat ${smtp}`" + act "To: ${recipients}" + msmtp -C $WORKDIR/tmp/$host.send -- ${=recipients} < "${mail}" if [ $? != 0 ]; then error "Error sending mail, skipped" else act "Mail sent succesfully" + # whitelist those to whom we send mails + cat ${mail} | $WORKDIR/bin/jaro -q learn ${=rm} ${mail} ${smtp} fi done - cd - - ${=rm} $WORKDIR/tmp/$host.send return 0 } @@ -664,6 +666,7 @@ update() { maildirmake $MAILDIRS/priv maildirmake $MAILDIRS/postponed maildirmake $MAILDIRS/unsorted + maildirmake $MAILDIRS/ml.unsorted ${=mkdir} $MAILDIRS/outbox ###### @@ -754,14 +757,6 @@ PF_RECURSE = yes EOF ####### - echo "# filters generated from Accounts" >> $PROCMAILDIR/rc - typeset -al accts - for f in `cat $WORKDIR/Accounts/* | awk '/^email/ { print $2 }'`; do - echo "ADDR=${f}\tDEST=priv/\tINCLUDERC=\$PMSRC/pf-chkto.rc" >> $PROCMAILDIR/rc - act "private account: <${f}>" - done - - ####### echo "# filters generated from Filters.txt" >> $PROCMAILDIR/rc for f in `cat $WORKDIR/Filters.txt | awk '/^#/ {next} /^./ { print $1 ";" $2 ";" $3 ";" $4 }'`; do @@ -773,12 +768,14 @@ EOF to) print "ADDR=${address}\tDEST=${destination}/\tINCLUDERC=\$PMSRC/pf-chkto.rc" \ >> $PROCMAILDIR/rc - act "messages to <${address}> in folder: ${destination}" + func "messages to <${address}> in folder: ${destination}" + maildirmake $MAILDIRS/$destination ;; from) print "ADDR=${address}\tDEST=${destination}/\tINCLUDERC=\$PMSRC/pf-check.rc" \ >> $PROCMAILDIR/rc - act "messages from <${address}> in folder: {$destination}" + func "messages from <${address}> in folder: {$destination}" + maildirmake $MAILDIRS/$destination ;; *) error "unsupported filter: $header (skipped)" @@ -789,8 +786,18 @@ EOF echo -n " +${destination} " >> $MUTTDIR/mboxes done + ####### + echo "# filters generated from Accounts" >> $PROCMAILDIR/rc + + typeset -al accts + for f in `cat $WORKDIR/Accounts/* | awk '/^email/ { print $2 }'`; do + echo "ADDR=${f}\tDEST=priv/\tINCLUDERC=\$PMSRC/pf-chkto.rc" >> $PROCMAILDIR/rc + act "private account: <${f}>" + done + echo " \\" >> $MUTTDIR/mboxes echo " +ml.unsorted +unsorted" >> $MUTTDIR/mboxes + uniq $MUTTDIR/mboxes > $WORKDIR/tmp/mboxes mv $WORKDIR/tmp/mboxes $MUTTDIR/mboxes rm -f $WORKDIR/tmp/mboxes @@ -1058,7 +1065,10 @@ main() fi ### End parsing command-specific options - if option_is_set -v; then act "Jaro Mail - $VERSION"; fi + if option_is_set -v; then + cat $JAROMAILEXEC | awk '/^#/ {print $0 } !/^#/ {exit}' + echo + fi if option_is_set -h; then usage; fi if option_is_set -q; then QUIET=1; fi if option_is_set -D; then func "Debug messages ON"; DEBUG=1; fi