1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/bin/bash
- set -euo pipefail
- WD=$(mktemp -d)
- cleanup (){
- rm -rf "${WD}"
- }
- trap cleanup EXIT
- cd "${WD}"
- ITER_SUBS=/opt/cropswap/gdbm-iter-subscriptions.py
- MIME_INJECT=/opt/cropswap/mime-inject.py
- DELIVERED=false
- SENDMAIL="/usr/sbin/sendmail"
- if ((DEBUG != 0)); then
- SENDMAIL="$DEBUGMAIL"
- fi
- mk_subject(){
- subject="$(cat subject)"
- if [ "${subject/\[${SUBJECT}\]/}" == "${subject}" ]; then
- subject="[${SUBJECT}] ${subject## }"
- fi
- echo "${subject}"
- }
- tee >(reformail -c -x "Subject:" >subject) original | "${MIME_INJECT}" "${MAILGROUP}" | reformime -s1 -e > body
- reformail \
- -X "Date:" \
- -X "MIME-Version:" \
- -X "Subject:" \
- -X "Content-Type:" \
- < original | reformail \
- -U "MIME-Version:" \
- -U "Content-Type:" | reformail \
- -I "Subject: $(mk_subject)" \
- -I "List-Id: $MAILGROUP" \
- -I "List-Unsubscribe: <mailto:$MAILGROUP?subject=[UNSUBSCRIBE]>" \
- -I "List-Subscribe: <mailto:$MAILGROUP?subject=[SUBSCRIBE]>" \
- -I "List-Post: <mailto:$MAILGROUP>" \
- -I "List-Unsubscribe-Post: List-Unsubscribe=One-Click" \
- | cat - body > mail
- declare -A SUBSCRIBED
- declare -a actions
- update(){
- alias="${actions[$1-1]}"
- email="${2}"
- SUBSCRIBED["$email"]="$alias"
- }
- mapfile -t -c 2 -C update actions <<EOF
- $("${ITER_SUBS}" "${MLIST}" "${SLIST}")
- EOF
- for email in "${!SUBSCRIBED[@]}"; do
- if [ "${email,,}" == "${NOFORWARD,,}" ]; then
- continue
- fi
- if [ "$TO" != "" ] && [ "$email" != "$TO" ]; then
- continue
- fi
- echo "Forwarding mail: "
- echo "From: ${FROM} <${MAILGROUP}>"
- echo "To: ${SUBSCRIBED["$email"]} <${email}>"
- "$SENDMAIL" -F "${FROM}" -f "${MAILGROUP}" "${SUBSCRIBED["$email"]} <${email}>" < mail
- DELIVERED=true
- done
- if ! $DELIVERED; then
- "$DEBUGMAIL" undelivered
- exit "$UNHANDLED"
- fi
|