Redirect as Attachment

Leider können Zarafas serverseitigen Regeln nicht die Regel „als Attachment weiterleiten“ abbilden. Diese packt die original ankommende E-Mail einfach als Anhang an eine leere E-Mail, die dann zum tatsächlichen Empfänger weitergeleitet wird. Einer unserer Partner sprach mich darauf an, da sein Kunde dringend diese Funktion benötigte – Die Sekretärin hätte sonst nicht richtig mit den Header-Zeilen der originalen E-Mails umgehen können.

Als kleinen Workaround habe ich das folgende Skript geschrieben, welches zumindest in procmail diese Funktion zur Verfügung stellt. Damit werden die E-Mails tatsächlich serverseitig als Attachment weitergeleitet. Allerdings kann die Regel nicht komfortabel via Outlook konfiguriert werden, ein Administrator muss sie auf dem Server aktivieren.

Noch ein wichtiger Hinweis vorweg: Dieses Skript habe ich nicht sehr intensiv getestet. Ich übernehme keinerlei Garantie für eine korrekte Funktionsweise. Wenn jemand die eine oder andere Änderung oder Ergänzung zu diesem Skript hat, so bitte ich um eine kleine Information.

Das ist das Skript „redirect_as_attachment.sh“:

#!/bin/bash
#
# workaround for Zarafas server-side rules not forwarding complete e-mails with all headers
# * generates e-mail with text "text" and headers like given
# * adds e-mail from pipe as attachment
# * usage in procmail: $0
#      :0 w
#      * [some condition]
#      | /path/to/redirect_as_attachment.sh $USER
#      EXITCODE=$?
#
# licensed under GPL -> so give back changes to author: ar@zarafaserver.de 😉
# delivered without any warranty and support

USER=$1
MAILTO="ar@zarafaserver.de"
MAILFROM="ar@zarafaserver.de"
SUBJECT="weitergeleitete E-Mail"

DAGENT=/usr/bin/zarafa-dagent

BOUNDARY_LEN=20
MIMEBOUNDARY1=`dd if=/dev/urandom bs=1 count=10 2> /dev/null | md5sum | sed -es/"^\(.\{$BOUNDARY_LEN\}\).*$"/"\1"/`
MIMEBOUNDARY2=`dd if=/dev/urandom bs=1 count=10 2> /dev/null | md5sum | sed -es/"^\(.\{$BOUNDARY_LEN\}\).*$"/"\1"/`
MIMEBOUNDARY3=`dd if=/dev/urandom bs=1 count=10 2> /dev/null | md5sum | sed -es/"^\(.\{$BOUNDARY_LEN\}\).*$"/"\1"/`
MIMECODE="---------------"

(echo "MIME-Version: 1.0"
echo "To: $MAILTO"
echo "From: $MAILFROM"
echo "Subject: $SUBJECT";
echo "Content-Type: multipart/mixed;"
echo " boundary=\"$MIMECODE$MIMEBOUNDARY1\""
echo ""
echo "--$MIMECODE$MIMEBOUNDARY1"
echo "Content-Type: multipart/alternative;"
echo " boundary=\"$MIMECODE$MIMEBOUNDARY2\""
echo ""
echo ""
echo "--$MIMECODE$MIMEBOUNDARY2"
echo "Content-Type: text/plain; charset=ISO-8859-15"
echo "Content-Transfer-Encoding: 7bit"
echo ""

# ---[ Text Version ]------------------------------------------------------

echo "Text"

# ---[ /Text Version ]------------------------------------------------------

echo ""
echo "--$MIMECODE$MIMEBOUNDARY2"
echo "Content-Type: multipart/related;"
echo " boundary=\"$MIMECODE$MIMEBOUNDARY3\""
echo ""
echo ""
echo "--$MIMECODE$MIMEBOUNDARY3"
echo "Content-Type: text/html; charset=ISO-8859-15"
echo "Content-Transfer-Encoding: 7bit"
echo ""

# ---[ HTML-Version ]-------------------------------------------------------
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
echo "<HTML>"
echo "<HEAD>"
echo "<meta content=\"text/html;charset=ISO-8859-15\" http-equiv=\"Content-Type\">"
echo "<title>$SUBJECT</title>"
echo "<style type=\"text/css\">"
echo "<!--"
echo "-->"
echo "</style>"
echo "</HEAD>"
echo "<BODY>"

echo "Text"

echo "</BODY>"
echo "</HTML>"
# ---[ /HTML-Version ]------------------------------------------------------

echo ""
echo "--$MIMECODE$MIMEBOUNDARY3--"
echo ""
echo "--$MIMECODE$MIMEBOUNDARY2--"
echo ""
echo "--$MIMECODE$MIMEBOUNDARY1"

# ---[ MSG-Datei ]----------------------------------------------------------
echo "Content-Type: message/rfc822"
echo "Content-Transfer-Encoding: 8bit"
echo "Content-Disposition: attachment"
echo ""

# Inhalt der Pipe in eine temp. Datei schreiben
TMPFILE=`/bin/tempfile`
cat > $TMPFILE

cat $TMPFILE 

# temp. Datei wieder entfernen
rm -f $TMPFILE

# ---[ /MSG-Datei ]---------------------------------------------------------

echo "--$MIMECODE$MIMEBOUNDARY1--"
echo ""
) | 2>&1 $DAGENT $USER

exit $?

Der geneigte Skripter wird sehen, dass es relativ simpel ist, anstelle des zarafa-dagent’s andere MDA’s oder schlicht das sendmail-Kommando einzubinden ;-). In procmail wird das Ganze dann wie folgt eingebunden:

:0 w
* [some condition]
| /path/to/redirect_as_attachment.sh $USER
EXITCODE=$?

Wichtig ist das „EXITCODE“-Kommando am Ende des procmail-Absatzes. Wenn das fehlt, dann verschwinden E-Mails deren Bearbeitung im Skript einen Fehler produziert im Nirvana.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.