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 56d0edaa3ef47245a49045cb6e2d90f340857ac6
parent 5bcaa0d3e80c7cb6c96931e6309f80d73d394a31
Author: Jaromil <jaromil@dyne.org>
Date:   Wed, 13 May 2015 14:21:25 +0200

checksum control on queue to outbox, early quiet and debug flag fix, better group sending

Diffstat:
Msrc/jaro | 6+++---
Msrc/mutt/general | 3++-
Msrc/zlibs/email | 30++++++++++++++++++++++--------
Msrc/zlibs/maildirs | 3++-
4 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/jaro b/src/jaro @@ -30,8 +30,8 @@ JAROMAILEXEC=$0 umask 066 # honor quiet and debug flags as early as possible -if [[ ${@} == *-q* ]]; then quiet=1; fi -if [[ ${@} == *-D* ]]; then debug=1; fi +if [[ ${@} == *-q* ]]; then QUIET=1; fi +if [[ ${@} == *-D* ]]; then DEBUG=1; fi # check if we are inside the directory @@ -143,7 +143,7 @@ vars+=(e_parsed) # global array for maildirs (filled by list_maildirs) typeset -al maildirs - +vars+=(last_deliver) # global variable for mutt binary vars+=(mutt pgpewrap dotlock) diff --git a/src/mutt/general b/src/mutt/general @@ -18,7 +18,8 @@ unset suspend unset wait_key set send_charset = utf-8 -set assumed_charset = us-ascii +set assumed_charset = utf-8 +# assumed was us-ascii #set charset = iso-8859-1 #set send_charset = us-ascii diff --git a/src/zlibs/email b/src/zlibs/email @@ -46,9 +46,14 @@ queue() { /User-Agent:/ { print "User-Agent: Jaro Mail <http://jaromail.dyne.org>"; next } { print $0 } ' > "$tmpqueue" + [[ $? = 0 ]] || { error "Error queing email from stdin into outbox"; return 1 } + + # calculate the sha1sum of the body to check integrity of delivery + _sha1sum=`body $ztmpfile | sha1sum -t` + _sha1sum=${_sha1sum[(w)1]} maildirmake "$MAILDIRS/outbox" - ${=mkdir} "$MAILDIRS/outbox/send" + # ${=mkdir} "$MAILDIRS/outbox/send" lock "$MAILDIRS/outbox" # check if recipients are a Group @@ -64,8 +69,8 @@ queue() { error "Group not found: $groupfile" return 1 } - grep -v '^#' $MAILDIRS/Groups/$groupfile | sysread recipients - groupnum=`print ${recipients} | wc -l` + recipients=`grep -v '^#' $MAILDIRS/Groups/$groupfile` + groupnum=`grep -v '^#' $MAILDIRS/Groups/$groupfile | wc -l` groupmode=`head -n1 "$MAILDIRS/Groups/$groupfile" | awk '/^#mode/ { print $2 } { next }'` [[ "$groupmode" = "" ]] && { groupmode="individual" } act "$groupnum recipients in total, sending mode $groupmode" @@ -79,7 +84,7 @@ queue() { ig=${base}-${RANDOM} cat "$tmpqueue" | \ awk '/^To:/ { print "'"To: $i"'"; next } { print $0 }' \ - > "${MAILDIRS}/outbox/new/${ig}.mail" + | deliver outbox # > "${MAILDIRS}/outbox/new/${ig}.mail" done ;; @@ -95,18 +100,27 @@ queue() { cat "$tmpqueue" | \ awk '/^To:/ { print "'"To: $cc"'"; print "'"Reply-To: $cc"'"; next } { print $0 }' \ - > "${MAILDIRS}/outbox/new/${ig}.mail" + | deliver outbox # "${MAILDIRS}/outbox/new/${ig}.mail" ;; esac else # recipients are set in the email envelope - printfile "$tmpqueue" | deliver "outbox" + printfile "$tmpqueue" | deliver outbox fi - + unlock "$MAILDIRS/outbox" - return 0 + _sha1sum_delivered=`body $last_deliver | sha1sum -t` + _sha1sum_delivered=${_sha1sum_delivered[(w)1]} + if [[ "$_sha1sum_delivered" = "$_sha1sum" ]]; then + func "correct delivery, SHA1 checksum on body match" + return 0 + fi + + error "Error on delivery, file checksum don't match" + return 1 + } ########### diff --git a/src/zlibs/maildirs b/src/zlibs/maildirs @@ -223,7 +223,8 @@ deliver() { # || [[ "$dest" =~ "^zz." ]] \ # || [[ "$dest" = "incoming" ]] && { base="`hostname`_jaro_`date +%Y-%m-%d_%H-%M-%S`_$RANDOM" - cat > "$MAILDIRS/$dest/new/$base" + last_deliver="$MAILDIRS/$dest/new/$base" + cat > "$last_deliver" [[ $? = 0 ]] || { error "Could not deliver email file into maildir $dest" func "Returning error to caller."