#!/usr/bin/env bash # # Send mails based on a template and a recipient list using MSMTP. # Check also the enhanced version at https://gitlab.torproject.org/rhatto/minimailer # # See also https://hostpresto.com/community/tutorials/how-to-send-email-from-the-command-line-with-msmtp-and-mutt/ # https://deaddabe.fr/blog/2021/10/06/sending-templated-emails-using-python-and-msmtp/ # # Example template file cat > /dev/null < /dev/null < somebody@example.org EOF # Parameters BASENAME="`basename $0`" BASEDIR="`dirname $0`" #TEMPLATE="$BASEDIR/message.tmpl" #RECIPIENTS="$BASEDIR/recipients.lst" #MSMTP_ACCOUNT="my-smtp-account-from-msmtprc" TEMPLATE="$1" RECIPIENTS="$2" MSMTP_ACCOUNT="$3" # Checks if [ -z "$MSMTP_ACCOUNT" ]; then echo "usage: $BASENAME " echo "" echo "example: $BASENAME message.tmpl recipients.lst my-provider" echo "check the source code for template and recipient filelist formats" exit 1 elif [ ! -e "$TEMPLATE" ] || [ ! -e "$RECIPIENTS" ]; then echo "missing config files" exit 1 fi # Dispatch cat $RECIPIENTS | while read recipient; do # Thanks for the quick sed regexp: # https://linuxconfig.org/extract-email-address-from-a-text-file address="`echo $recipient | sed -r 's/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/\n&\n/ig;s/(^|\n)[^@]*(\n|$)/\n/g;s/^\n|\n$//g;/^$/d'`" echo "sending to $address..." sed -e "s/\$recipient/$recipient/g" \ -e "s/\$address/$address/g" $TEMPLATE | \ msmtp -a $MSMTP_ACCOUNT $address done