cropswap-sendmail.sh 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/bash
  2. set -euo pipefail
  3. MAIL="$(cat -)"
  4. MAILGROUP=cropswap@shandan.one
  5. declare -A SUBSCRIBED
  6. declare -a actions
  7. update(){
  8. da="${actions[$1-1]:0:1}"
  9. db="${2:0:1}"
  10. alias="${actions[$1-1]#?}"
  11. email="${2#?}"
  12. [ "$da" == "$db" ] || exit 1 # corrupt list
  13. if [ "$da" == "+" ]; then
  14. SUBSCRIBED["$email"]="$alias"
  15. else
  16. SUBSCRIBED["$email"]=""
  17. fi
  18. }
  19. exec 4<> "${SLIST}.txt"
  20. flock 4
  21. mapfile -t -c 2 -C update -u 4 actions
  22. for email in "${!SUBSCRIBED[@]}"; do
  23. if [ -z "${SUBSCRIBED["$email"]}" ]; then
  24. continue
  25. fi
  26. echo "+${SUBSCRIBED["$email"]}"
  27. echo "+$email"
  28. done > "${SLIST}".txt
  29. flock -u 4
  30. for email in "${!SUBSCRIBED[@]}"; do
  31. if [ -z "${SUBSCRIBED["$email"]}" ] || [ "${email,,}" == "${NOFORWARD,,}" ]; then
  32. continue
  33. fi
  34. echo "Forwarding mail to: ${SUBSCRIBED["$email"]} <${email}>"
  35. formail -kb \
  36. -X "MIME-Version:" \
  37. -X "Content-Type:" \
  38. -X "Subject:" \
  39. -X "Date:" \
  40. <<<"${MAIL}" | /usr/sbin/sendmail \
  41. -F "${FROM}" \
  42. -f "${MAILGROUP}" "${SUBSCRIBED["$email"]} <${email}>"
  43. done
  44. #TODO: report errors properly