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:
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."