diff --git a/Dockerfile b/Dockerfile index 0738d35..b785acc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,8 @@ RUN apt-get update \ && apt-get clean && rm -fr /var/lib/apt/lists/* RUN maildirmake /var/mail/working \ + && mkdir /var/mail/working/landing \ + && mkdir /var/mail/working/extracted \ && echo "to /var/mail/working" > /root/.mailfilter RUN touch /var/mail/save-attachments.log diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index a8264ed..45f1d71 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -6,6 +6,8 @@ if [ -d /var/mail/working ]; then chown -R root /var/mail/working else maildirmake /var/mail/working + mkdir /var/mail/working/landing + mkdir /var/mail/working/extracted echo "to /var/mail/working" > /root/.mailfilter fi diff --git a/save-attachments.sh b/save-attachments.sh index d7e8880..7543468 100755 --- a/save-attachments.sh +++ b/save-attachments.sh @@ -1,6 +1,51 @@ #!/bin/bash -LOG=/dev/stderr -echo "== $(date -Is) ==" >> $LOG +MAILDIR=/var/mail/working +DESTINATION=/output +DEBUG=0 -fetchmail +echo "== $(date -Is) ==" +# retrieve +fetchmail + +# shuffle around some files to the working directory +mv $MAILDIR/new/* $MAILDIR/landing/ +cd $MAILDIR/landing/ + +# process each message in a loop +shopt -s nullglob +for i in * +do + echo "[$(date '+%T')] Backing up $i and processing..." + cp $i $MAILDIR/cur/ + mkdir $MAILDIR/extracted/$i + mv $i $MAILDIR/extracted/$i/ + + munpack -C $MAILDIR/extracted/$i -q $MAILDIR/extracted/$i/$i + + if [ -f /config/custom-handler ]; then + # allow custom handler script to do something here + exec /config/custom-handler "$MAILDIR/extracted/$i/" + fi + + echo "[$(date '+%T')] Copying extracted attachments, if any..." + # need to extract date from email header + MSGTIMESTAMP=$(cat $MAILDIR/extracted/$i/$i | sed -n 's/^Date: *\([^\n]*\)/\1/p') + MSGDATE=$(date --date="$MSGTIMESTAMP" '+%F') + MSGTIME=$(date --date="$MSGTIMESTAMP" '+%H%M%S') + mkdir -p $DESTINATION/$MSGDATE/$MSGTIME + rm $MAILDIR/extracted/$i/$i + for z in $MAILDIR/extracted/$i/* + do + cp -v $z $DESTINATION/$MSGDATE/$MSGTIME/$(basename $z) + rm $z + done +done + +shopt -u nullglob + +if [[ $DEBUG -eq 0 ]]; then + rm -fr $MAILDIR/extracted/$i/ +fi + +echo "[$(date '+%T')] Done!"