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“:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
<span style="color: #0000ff;">#!/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 $?</span> |
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:
1 2 3 4 5 |
<span style="color: #0000ff;">:0 w * [some condition] | /path/to/redirect_as_attachment.sh $USER EXITCODE=$? </span> |
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.