|
@@ -1,19 +1,23 @@
|
|
#!/bin/bash
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
set -euo pipefail
|
|
-MAIL="$(cat - | formail -kb \
|
|
|
|
|
|
+WD=$(mktemp -d)
|
|
|
|
+cleanup (){
|
|
|
|
+ rm -rf "${WD}"
|
|
|
|
+}
|
|
|
|
+trap cleanup EXIT
|
|
|
|
+
|
|
|
|
+cat - | formail -kb \
|
|
-X "MIME-Version:" \
|
|
-X "MIME-Version:" \
|
|
-X "Content-Type:" \
|
|
-X "Content-Type:" \
|
|
-X "Subject:" \
|
|
-X "Subject:" \
|
|
-X "Date:" \
|
|
-X "Date:" \
|
|
-)"
|
|
|
|
-subject="$(formail -cx "Subject:" <<<"${MAIL}")"
|
|
|
|
|
|
+> "${WD}/mail"
|
|
|
|
+subject="$(formail -cx "Subject:" < "${WD}/mail")"
|
|
if [ "${subject/\[${SUBJECT}\]/}" == "${subject}" ]; then
|
|
if [ "${subject/\[${SUBJECT}\]/}" == "${subject}" ]; then
|
|
subject="[${SUBJECT}] ${subject## }"
|
|
subject="[${SUBJECT}] ${subject## }"
|
|
fi
|
|
fi
|
|
-MAIL="$(cat - | formail \
|
|
|
|
- -I "Subject: ${subject}" \
|
|
|
|
- | tail -n+2 \
|
|
|
|
-)"
|
|
|
|
|
|
+formail -I "Subject: ${subject}" < "${WD}/mail" | tail -n+2 > "${WD}/mail.new"
|
|
|
|
+mv "${WD}"/mail{.new,}
|
|
|
|
|
|
declare -A SUBSCRIBED
|
|
declare -A SUBSCRIBED
|
|
declare -a actions
|
|
declare -a actions
|
|
@@ -44,11 +48,12 @@ flock -u 4
|
|
|
|
|
|
for email in "${!SUBSCRIBED[@]}"; do
|
|
for email in "${!SUBSCRIBED[@]}"; do
|
|
if [ -z "${SUBSCRIBED["$email"]}" ] || [ "${email,,}" == "${NOFORWARD,,}" ]; then
|
|
if [ -z "${SUBSCRIBED["$email"]}" ] || [ "${email,,}" == "${NOFORWARD,,}" ]; then
|
|
- continue
|
|
|
|
|
|
+ continue
|
|
|
|
+ fi
|
|
|
|
+ if [ "$TO" != "" ] && [ "$email" != "$TO" ]; then
|
|
|
|
+ continue
|
|
fi
|
|
fi
|
|
echo "Forwarding mail to: ${SUBSCRIBED["$email"]} <${email}>"
|
|
echo "Forwarding mail to: ${SUBSCRIBED["$email"]} <${email}>"
|
|
- /usr/sbin/sendmail -F "${FROM}" -f "${MAILGROUP}" "${SUBSCRIBED["$email"]} <${email}>" <<EOF
|
|
|
|
-${MAIL}
|
|
|
|
-EOF
|
|
|
|
|
|
+ /usr/sbin/sendmail -F "${FROM}" -f "${MAILGROUP}" "${SUBSCRIBED["$email"]} <${email}>" < "${WD}/mail"
|
|
done
|
|
done
|
|
#TODO: report errors properly
|
|
#TODO: report errors properly
|