
#!/bin/bash
# File	: chk_automailing.sh
# By	: Maarten de Boer, PA4MDB, 071212
# Subject	: verzenden van teksten uit teksten/ uit lijsten/
# Mod0.2:	: optie -1; eerst lijn in adreslijst; head -$HEADLINES|cut -d\; -f1|grep -v \#|. TEKSTEN -> TEXT, LIJSTEN -> LISTS
# Mod(0.3)	: -t (tomorrow) added. The mail for next day will be send to the first of the LIST. So we can see what will be send next day; $BASE -> $HOME
# Mod(0.4)	: sendmail -t -F ${FULLNAME}, and REPLYTO added
# Mod(0.5)	: dos2unix added, omdat de files met CRLF niet goed verwerkt konden worden
# Mod(0.6)	: Var DOS2UNIX, BASEDIR
# (0.7)		: Website added. Removed <spaces> at FULLNAME
# 0.8	: Changed name, ${FROM} added ${FULLNAME} removed, sleep 1 added
# 0.9	: OPENING added YRMON at ${LOG}
# 0.10	: -1 does not work when 1st line (of lists) is a #. Changed head & grep
#	: FOOTER added. So send without footer can
#0.11	: /bin/bash ipv sh for atratostratoserver.net
#0.12	: OPENING => SALUTATION (AANHEF). Added ext LOGGING & sed for removing SPACE after ;
#0.13	: Unsubscribe-${LIST}-${MAILTO} added
#(0.14),180321	: Mod. some. Also Salutation
#(0.15),180523	: Mod ${LIST}-${DAY}.txt => ${LIST}_${DAY}.txt
#(0.16),181107	: Mod Unsubcript with "_"
#(0.17),181107	: Added -f
#(0.18),190624	: Mod/ agrarix.com -> agrarix.it
PGM="`basename $0|cut -d\. -f1`"
VERSION="0.18"
BASEDIR="${HOME}/automailing"
YRMON="`date +%Y-%m`"
LOG="${BASEDIR}/log/${PGM}-${YRMON}.log"
TMP="/tmp/${PGM}.$$"
V=""  # VERBOSE
MAIL=""
DAY="`date +%Y%m%d`"
CC=""
FIRST=""
VERSIONINFO=""
TOMORROW=""
REPLY_TO="automailing@agrarix.nl"
REPLYTO="automailing@agrarix.nl"
CC=""
BCC=""
MAILFILE="${TMP}.mailfile"
FROM="Agrarix automailing <automaling@agrarix.nl>"
#FULLNAME="Automailing service"
PATH="/home/agrarix/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/opt/mysql5/bin"
FOOTER=1
SALUTATION="heer / mevrouw"
LOGGING=""
UNSUBSCRIBETO="automailing@agrarix.nl"
FILTER="[?]*"

USAGE()
{
  echo "${PGM}"
  echo "  -1 : Send mail to the 1st address in lists"
  echo "  -d <DAY> (YYYYddmm) [${DAY}]"
  echo "  -f : <Filter_a_name>"
  echo "  -h : This help"
  echo "  -l : extended Logging"
  echo "  -m : send Mail"
  echo "  -n : No footer added at end of mail"
  echo "  -t : Tomorrow"
  echo "  -v : Verbose"
  echo "  -V : Version"
  echo "  -x : set -x"
}

while [ $# -gt 0 ]
do
  case "$1" in
    '-d')  if [ "$2" != "" ]; then
             DAY=$2
           else
             DAY="`date +%Y%m%d`"
           fi
           shift ;;
    '-1')  FIRST=1 ;;  # Alleen het 1e adres uit de lists-file gebruikt. Om de mailing te kunnen testen
    '-t')  FIRST=1 ; DAY="`date --date tomorrow +%Y%m%d`" ;;
    '-f')  FILTER="${2}" ; shift ;;  # Filter a name
    '-m')  MAIL=1 ;;  # De mail verstuurd worden
    '-l')  LOGGING=1 ;;  # extended logging
    '-n')  FOOTER="" ;;  # No footer at end of mail
    '-h')  USAGE ;;
    '-x')  set -x ;;
    '-v')  V=1 ;;  # Verbose. Laat de ENV's zien & de texten
    '-V')  echo "Version=${VERSION}" ; exit 2 ;;
    *) echo "Option $1 not found." ; USAGE; exit 1 ;;
  esac
  shift
done

if [ $V ] ; then
  echo "PGM=${PGM}"
  echo "VERSION=${VERSION}"
  echo "TMP=${TMP}"
  echo "LOG=${LOG}"
  echo "DAY=${DAY}"
  echo "FILTER=${FILTER}"
  echo "FIRST=${FIRST}"
  echo "FROM=${FROM}"
fi


touch ${LOG} ${TMP} ${MAILFILE}
echo "`date +%Y%m%d_%H%M` ${PGM} (v${VERSION}) running for ${DAY} (FILTER=${FILTER})" | tee -a ${LOG}

DOS2UNIX="`type -P dos2unix`"
if [ "${DOS2UNIX}" = "" ]; then
  echo "`date` No dos2unix found (cat will be used). " | tee -a ${LOG}
  DOS2UNIX="cat"
fi
echo "DOS2UNIX=${DOS2UNIX}"

cd ${BASEDIR}/lists
for LIST in `ls -1 *`
do
  LISTFILE="${BASEDIR}/lists/${LIST}"
  TEXTFILE="${BASEDIR}/text/${LIST}_${DAY}.txt"

# Use only 1st address in list-file
if [ ${FIRST} ] ; then
  HEADLINE="1"
else
  HEADLINE="`wc -l ${LISTFILE} |grep -v \#|cut -d\; -f1|cut -d ' ' -f1`"
fi

# Test of er een betreffende teksten-file is. Anders niet zenden.
if [ -s ${TEXTFILE} ]; then
# Remove SPACE after ; by `sed`
  cat ${LISTFILE}|${DOS2UNIX}|grep -v \#|grep -i ${FILTER}|head -${HEADLINE}|sed -e 's/\; /\;/g'|while read LINE
  do
    SUBJECT="`cat ${TEXTFILE}|${DOS2UNIX}|grep \#|grep -i subject|cut -d: -f2`"
    FROM="`cat ${TEXTFILE}|${DOS2UNIX}|grep \#|grep -i from|cut -d: -f2`"
    REPLYTO="`cat ${TEXTFILE}|${DOS2UNIX}|grep \#|grep -i replyto|cut -d: -f2|sed -e 's/\ //g'`"
    UNSUBSCRIBETO="`cat ${TEXTFILE}|${DOS2UNIX}|grep \#|grep -i unsubscribeto|cut -d: -f2|sed -e 's/\ //g'`"
    DEFSALUTATION="`cat ${TEXTFILE}|${DOS2UNIX}|grep ^#|grep -i defsalutation|cut -d: -f2`"
    if [ "${DEFSALUTATION}" = "" ]; then
      DEFSALUTATION="heer / mevrouw"
    fi
    MAILTO="`echo ${LINE}|cut -d\; -f1`"
    REMARKS="`echo ${LINE}|cut -d\; -f2`"
    SALUTATION="`echo ${LINE}|cut -d\; -f3`"
    # No Remarks in LIST-file
    if [ "${MAILTO}" = "${REMARKS}" ]; then
      REMARKS=""
    fi
    # No Opening in LIST-file
    echo ""
    echo "DEFSALUTATION=${DEFSALUTATION}|"
    echo "SALUTATION=${SALUTATION}|"
    echo "MAILTO=${MAILTO}"
    echo "REMARKS=${REMARKS}"
    echo "UNSUBSCRIBETO=${UNSUBSCRIBETO}"
sleep 1
    if [ "${MAILTO}" = "${SALUTATION}" ] || [ "${REMARKS}" = "${SALUTATION}" ] || [ "${SALUTATION}" = "" ]; then
      SALUTATION="Beste ${DEFSALUTATION},"
    else
      SALUTATION="Beste ${SALUTATION},"
    fi
    echo "LIST:${LIST}(${HEADLINE});TEXTFILE:${TEXTFILE};FROM:${FROM};MAILTO:${MAILTO};FULLNAME:${FULLNAME};REPLYTO:${REPLYTO};SUBJECT:${SUBJECT};SALUTATION=${SALUTATION};REMARKS=${REMARKS};UNSUBSCRIBETO=${UNSUBSCRIBETO};"
# remove lines with #'s in 1st kolom
    echo $SALUTATION > $TMP
    cat ${TEXTFILE} | grep -v \^# >> ${TMP}
    echo "" >> ${TMP}
    echo "" >> ${TMP}
    echo "---" >> ${TMP}
    if [ ${FOOTER} ] ; then
      echo "Deze mail is verzorgd door Automailing van Agrarix-IT" >> ${TMP}
      echo "Meer informatie te vinden op http://www.agrarix.it" >> ${TMP}
      echo "Afmelden door \"mailto:${UNSUBSCRIBETO}?subject=Unsubscribe_${LIST}_${MAILTO}\" te sturen" >> ${TMP}
    fi

    if [ ${V} ]; then
      echo "-------"
      cat ${TMP}
      echo "-------"
    fi

    if [ ${MAIL} ]; then
      if [ "${REPLYTO}" = "" ]; then
        REPLYTO="${REPLY_TO}"
      fi
      echo "From: ${FROM}" > ${MAILFILE}
      echo "To: ${MAILTO}" >> ${MAILFILE}
      echo "Cc: ${CC}" >> ${MAILFILE}
      echo "Bcc: ${BCC}" >> ${MAILFILE}
      echo "Reply-to: ${REPLYTO}" >> ${MAILFILE}
      echo "Subject: ${SUBJECT}" >> ${MAILFILE}
      cat ${TMP} >> ${MAILFILE}

      if [ ${LOGGING} ]; then
        echo "  mailto:$MAILTO;From:${FROM};CC:${CC};BCC:${BCC};Reply-to:${REPLYTO};SUBJECT=${SUBJECT};SALUTATION=${SALUTATION};REMARKS:${REMARKS};"|tee -a ${LOG}
      else
        echo "  => ${MAILTO}; ${REMARKS} ; ${SALUTATION};"|tee -a ${LOG}
      fi
      cat ${MAILFILE}|${DOS2UNIX}|/usr/sbin/sendmail -t 
      sleep 1
    fi

  done

fi

done 

exit 0

