Disclaimer einfügen
Als Disclaimer bezeichnet man einen Anhang an jede Mail, um z.B. die Firmenadresse oder andere Informationen mit ausgehenden Mails zu übermitteln. Beim Einsatz von Programmen wie Outlook wird dies oft als "Signatur" bezeichnet.
Links zu kommerziellen Produkten finden Sie auf MSXFAQ - Kommerzielle Disclaimer
Unterstützung durch
Net at
Work:
Aufgrund der aktuellen Änderung zum 01. Jan 2007 bieten wir ihnen
schlüsselfertige Lösungen an.
Für Exchange 2007 funktioniert der Weg über SMTP-Sinks nicht mehr. Aber Exchange 2007 Transportrules haben die Funktion schon eingebaut. Siehe E2K7 Disclaimer. Exchange 2010 kann auch Disclaimer mit HTML und Active Directory Felder addieren.
Das Skript
Folgendes Skript sollten Sie als "disclaimer.vbs" auf dem Exchange Server an einer geeigneten Ort speichern. Da der SMTP-Server als "LocalSystem" läuft, muss das Konto "SYSTEM" Leserechte auf diese Datei haben.
<SCRIPT LANGUAGE="VBScript"> Sub ISMTPOnArrival_OnArrival(ByVal objMessage, EventStatus ) Dim objStream Set objStream = objMessage.GetStream obhStream.Position = objStream.Size objStream.WriteText "-----------------------------------" & vbCrLf objStream.WriteText "Disclaimer Zeile 1" & vbCrLf objStream.WriteText "Disclaimer Zeile 2" & vbCrLf objStream.WriteText "Disclaimer Zeile 3" & vbCrLf objStream.Flush objMessage.DataSource.Save EventStatus = 0 End Sub </SCRIPT>
In den TechNet Artikeln finden sich ausgereifter Skripte, die auch mit HTML und TEXT-Nachrichten korrekt umgehen. z.B. im folgendem TechNet Artikel:
- 317680 How to add a disclaimer to outgoing SMTP messages in Visual Basic Script
Auch diverse kommerzielle Lösungen liefern ihnen hier natürlich weitergehende Lösungen. Verstehen Sie dieses kleine Skript eher als Technologiedemonstration.
Der SMTP-Server
Diese Skript muss auf dem Server natürlich noch registriert werden und zwar wie folgt (jeweils einer Zeile):
cscript smtpreg.vbs /add 1 OnArrival Disclaimer CDO.SS_SMTPOnArrivalSink "mail from=*@firma.de"
cscript smtpreg.vbs /setprop 1 OnArrival Disclaimer Sink ScriptName "c:\Temp\Disclaimer.vbs"
Die beiden Zeilen registrieren seinen SMTP-Sink, der bei der Ankunft einer Nachricht ausgeführt wird, wenn die Absenderadresse von der Firma selbst ist. Damit werden eingehende Mails von extern nicht bearbeitet.
SMTP-Server kaskadieren.
Das Skript ist ein "On Arrival"-Sink, d.h. er wird gefeuert, wenn eine Mail den SMTP-Server erreicht. Leider gibt es hier eine Designschwäche von Exchange, dass ausgehende Mails, die von MAPI-Empfängern gesendet werden, nicht auf diesem Weg verändert werden können. Das CDO-Objekt ist nur eine temporär Kopie und keine Repräsentation der Mail. Aus diesem Grund müssen Sie zwei SMTP-Server hintereinander schalten. Siehe auch:
As mentioned earlier, the CDO_OnArrival event is a
wrapper around the transport OnSubmission event that provides a handle to
the messages in the CDO message format. The major benefit is that the
Message object interface has many useful methods, such as the parsing of
MIME and RFC 822 headers. The major drawback is that the CDO interface adds
significant overhead, and is synchronous. The CDO_OnArrival event is most
appropriate für sinks that are run on very few messages. This is the only
piece that is easily programmable using a high-level scripting language like
VBScript.
Quelle:
http://msdn2.microsoft.com/en-us/library/ms998608.aspx#transportevents_topic6
- 273233 You cannot modify MAPI messages that are trapped in an SMTP transport event sink
- 288756 SMTP Transport Event Does Not Fire für MAPI Messages
-
SMTP-EventSink
Beschreibung, wie Sie zwei SMTP-Server hintereinander schalten.
Diese relativ umständlich Lösung ist allerdings nicht erforderlich, wenn Sie z.B.: dedizierte Connectorserver für die Übermittlung einsetzen. Dann senden ihre Mailboxserver die Nachrichten natürlich per SMTP an den Connectorserver und das Skript kann diese problemlos ändern.
Kommerzielle Lösungen können natürlich z.B.: in C++ geschrieben werden und dann den SMTP "OnPostProcessing"-Sink verwenden. Hier kann dann wirklich jede Mail verändert werden. Allerdings steht dann nicht das CDO-Message-Objekt zur Verfügung.
Weiterhin sollten Sie folgende KB-Artikel im Auge behalten, wenn Sie sehr viele Mails umschlagen:
- 905291 The inetinfo.exe process uses lots of memory and memory usage
continues to increase until the SMTP service is unresponsive in Windows
Server 2003 Service Pack 1
(Hotfix bringt Aqueue.dll Version 6.0.3790.2520) - 830695 Increased memory usage in the Inetinfo.exe process if delivery restrictions are set on the SMTP connector in Exchange 2000 Server (In E200 SP4 gefixt)
- 910932 Memory usage may increase over time when a computer that is
running Windows Server 2003 uses the SMTP service to process many
outgoing messages
(Hotfix bringt Aqueue.dll Version 6.0.3790.2619)
Sonstige VerbesserungsMöglichkeiten
Das Einbinden eines Disclaimers an eine ausgehende Mail mit einem SMTP-OnArrivalEventsink ist zwar einfach, wie das Beispiel auch zeigt, aber hat durchaus einige Einschränkungen. Hier ist Platz für eigene Erweiterungen oder kommerzielle Lösungen
- Erforderliche Kaskadierung
Die Lösung per VBScript mit CDO-Objekten funktioniert nur in Verbindung mit dem "OnArrivalSink". Damit auf diesem Wege auf einem einzelnen Server auch MAPI-Mails verarbeitet werden, muss man zwei SMTP-Server hintereinander schalten und den "OnArrival" auf dem zweiten Server nutzen. Dies kann man umgehen, in dem man z.B.: einen "OnPostProcessing"-Sink verwendet. Dazu muss man aber eine DLL einsetzen und tiefer in die Materie einsteigen, da die Mail nicht über ein CDO-Objekt angesprochen werden kann - Performance
Der "OnArrival"-Sink ist nicht der schnellste, da der SMTP-Server jede Mail in ein CDO-Objekt umwandelt, auch wenn das vielleicht gar nicht benötigt wäre. - Firmenspezifische Signatur
In einer Exchange Organisation gibt es oft mehrere Firmen oder eigenständige Gruppen, die natürlich eigenständige Signaturen benötigen. So könnte z.B.: über eine OU oder eine Gruppenzugehörigkeit dies gesteuert werden. - Personalisierung
Eine Signatur sollte bzw. kann natürlich die Telefondurchwahl, die Faxnummer, die Mailadresse und die Adresse des Absenders enthalten. So könnte eine erweiterte Lösung diese Daten aus dem Active Directory abfragen. - Keine doppelten Signaturen
Hat ein Benutzer bereits eine Signatur eingefügt, wäre das verdoppeln natürlich unschön, wenngleich auch nur der einzig sichere Weg. Leider ist es sehr schwer, eine bestehende Signatur als solche zu erkennen. Es wird also besser sein, immer die Firmensignatur anzuhängen und die Mitarbeiter zu bitten, ihre eigenen Signaturen zu entfernen oder zu reduzieren. - Nur externe Signaturen
Da Exchange SMTP-Transport Event Sinks natürlich immer zuschlagen, sollte eine Lösung diese Meldung nur dann addieren, wenn die Mail wirklich nach "extern" geht. Mails innerhalb der Organisation brauchen nur dann eine Signatur, wenn der Empfänger und Absender in unterschiedlichen Firmen arbeiten. Aber selbst dann muss sichergestellt werden, dass die Signatur nur einmal addiert wird, auch wenn die Mail durch mehrere SMTP_Server geroutet wird.
Leider habe ich noch kein "fertiges Skript", welches all diese Anforderungen erfüllt. Es gibt aber einige kommerzielle Werkzeuge, die solche Lösungen bereit stellen.
Weitere Links
- SMTP-EventSink
- Exchange 2007 - Overview of
Disclaimers
http://technet.microsoft.com/en-us/library/bb124352.aspx - Q288098 How to Add a Disclaimer to Outgoing SMTP Messages with SMTP Transport Events
- Q288098 SAMPLE: How to Add a Disclaimer to Outgoing SMTP
- Q317327 HOWTO Add a Disclaimer to Outgoing SMTP Messages in Visual Basic
- Q317680 HOWTO Add a Disclaimer to Outgoing SMTP Messages in Visual Basic Script
- 317327 HOW TO: Add a Disclaimer to Outgoing SMTP Messages in Visual Basic
- 273233 You cannot modify MAPI messages that are trapped in an SMTP transport event sink
- 288756 SMTP Transport Event Does Not Fire für MAPI Messages
- Disclaimer
http://dnn.mssbsfaq.de/SBS2003/Exchange2003/DisclaimeranausgehendeNachrichtenanhängen/tabid/380/Default.aspx -
Microsoft Sample Code (C++)für einen eigenen Disclaimer
http://download.microsoft.com/download/exchplatinumbeta/Other/1.0/WIN98MeXP/EN-US/Smtpdisclaimer.exe -
SlipStick Infoseite zu Disclaimer
http://www.slipstick.com/addins/sig.htm
http://www.slipstick.com/addins/content_control.ht - Performancetests mit einem Disclaimer Script als VBScript oder als
VB-DLL.
VBScript ist sogar schneller aber auf Kosten der CPU-Belastung
http://www.MSExchange.org/articles/Disclaimer-Fun.html
Kommerzielle Lösungen
Hier finden Sie einige Lösungen, die zum Teil auf dem Server und zum Teil auf einer Client Erweiterung basieren. Die Liste erhebt keinen Anspruch auf Vollständigkeit.