Exchange 2007 Foreign Connector
In eine Exchange 2007 Umgebung ohne Exchange 2003 können Sie nachträglich kein Exchange 2003 mehr nachinstallieren !!. Beachten Sie dies, wenn Sie noch "alte" Connectoren einsetzen wollen.
Der Foreign Connector funktioniert unverändert auch noch mit Exchange 2010, 2013, 2016 und sogar 2019
Mit Exchange 2007 entfallen nicht nur X.400-Connectoren ersatzlos, sondern auch die bisherigen EDK-Connectoren sind nicht mehr verfügbar. Wieder einmal sind die Hersteller angehalten, sich an Exchange 2007 mit einer neuen API zu verbinden. Diese ist aber denkbar einfach. Der neue Connector-Typ heißt "Foreign-Connector" und arbeitet dateiorientiert.
Eingerichtet wird dieser mit der Exchange Management Shell und den folgenden Commandlets. (Diese Funktion war in der Beta noch nicht verfügbar)
New-ForeignConnector Get-ForeignConnector Remove-ForeignConnector Set-ForeignConnector
In der Exchange Hilfe finden Sie eine genauere Beschreibung für den umgang. Interessant ist aber die Art, wie der Connector funktioniert.
- DROP-Verzeichnis
Ausgehende Nachricht an die konfigurierten Adressen landen einfach als "Datei" in einem lokalen oder Netzwerkverzeichnis. Diese so genannte "DROP"-Verzeichnis gibt es je Foreign Connector. Eine klassische Datei-API. Der Server zur Weiterverarbeitung muss also nur ein Verzeichnis überwachen und die Mails dort auslesen. - REPLAY oder PICKUP
Nachrichten vom fremden System zu Exchange zurück werden ebenfalls über eine Dateischnittstelle zugeliefert. Dazu gibt es auf dem HUB/Transport-Server das Verzeichnis REPLAY bzw. PICKUP, in welches der Connector seine Daten einliefern kann. Exchange prüft alle 5 Sekunden dieses Verzeichnis und list per Default bis zu 100 Mails pro Minute aus. - DirSync
Es gibt auch keine Schnittstelle mehr, über den Connector an die Empfänger etc. zu kommen. Der Server für den fremden Adressraum muss einfach per LDAP an das Active Directory gehen
Im Gegensatz zum EDK gibt es keinen MAPI-Zugriff auf ein Connector-Postfach und die darin enthaltenen Objekte durch den Hersteller des Connectors selbst. Damit geht Exchange ein Stück weit in die Richtung, die Unix-Mailsysteme schon immer genutzt haben.
- New-ForeignConnector
https://learn.microsoft.com/en-us/powershell/module/exchange/new-foreignconnector
Foreign Connector anlegen
Aufgrund der einfachen Einrichtung und Anbindung plane ich ein paar Codebeispiele, um mit dieser Anbindung z.B.: eine SMS zu versenden oder andere Aufgaben durchzuführen. Fangen wir einfach mal mit einem einfachen Connector an, der z.B. Nachrichten an den Adressraum "FAX2 versenden soll:
Zuerst müssen wir mit der PowerShell einen entsprechenden Connector anlegen.
New-ForeignConnector ` -Name Foreign-FAX ` -AddressSpaces "FAX:*;1"
Beachten Sie, dass man den Connector nicht im Exchange System Manager sehen kann. Aber eine Ausgabe von "Get-ForeignConnector" liefert schon mehr Details:
[PS] C:\>Get-ForeignConnector | fl DropDirectory : Foreign-FAX DropDirectoryQuota : unlimited RelayDsnRequired : False Enabled : True AddressSpaces : {FAX:*;1} MaxMessageSize : unlimited ConnectedDomains : {} IsScopedConnector : False IsSmtpConnector : False Comment : SourceRoutingGroup : Exchange Routing Group (DWBGZMFD01QNBJR) SourceTransportServers : {WS03R2EEEXCHLCS} HomeMTA : Microsoft MTA HomeMtaServerId : WS03R2EEEXCHLCS MinAdminVersion : -2147453113 AdminDisplayName : ExchangeVersion : 0.1 (8.0.535.0) Name : Foreign-FAX DistinguishedName : CN=Foreign-FAX,CN=Connections,CN=Exchange Routing Group (DWBGZMFD01QNBJR), CN=Routing Groups,CN=Exchange Administrative Group (FYDIBOHF23SPDLT), CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange, CN=Services,CN=Configuration,DC=contoso,DC=com Identity : Foreign-FAX Guid : c5fed047-b805-4082-96c2-69e578deed18 ObjectCategory : contoso.com/Configuration/Schema/ms-Exch-Mail-Gateway ObjectClass : {top, msExchConnector, mailGateway} WhenChanged : 2/25/2007 2:22:15 PM WhenCreated : 2/25/2007 2:22:15 PM OriginatingServer : WS03R2EEEXCHLCS.contoso.com IsValid : True
Das "Drop-Verzeichnis" heißt also "Foreign-FAX" aber ist erst einmal noch nicht zu finden. Es wird nicht von der PowerShell angelegt. Sie können den Pfad natürlich anpassen:
Set-ForeignConnector ` -Identity "Foreign-Fax" ` -DropDirectory "D:\Foreign-Fax"
Das bietet sich natürlich an, wenn Sie das Verzeichnis z.B. per SMB freigeben möchten und fremde Zugriffe auf das Exchange Programmverzeichnis unterbinden wollen.
Mails von der Exchange Organisation zum Connector
Daher senden wir einfach per OWA oder Outlook eine Mail an die Adresse "Fax:1234".
Durch die direkte Eingabe der Adresse mit eckigen Klammern"[ ]" kann man jeden beliebigen Adressraum erreichen, auch wenn keine entsprechenden Adressvorlagen auf dem Server hinterlegt sind. Im Exchange Queue Manager kann man die Warteschlange sogar schon sehen
Wie Sie auch sehen können, legt das PowerShell Commandlet das Drop-Verzeichnis nicht einmal an. Auch dieses Verzeichnis müssen wir noch selbst anlegen. Wohl dem, der seine Eventlogs überwacht. Darin findet sich die dazu passende Meldung:
Kaum wurde das Verzeichnis angelegt, stellt Exchange die Nachricht doch noch zu. Stellen Sie bitte sicher, dass die NTFS-Rechte folgende Einträge haben:
Network Service: Full Control System : Full Control Administrators : Full Control)
Meist müssen sie nur "Network Service: Full Control" addieren.
Die Message selbst ist einfach eine EML-Datei, die man sich einfach mit Notepad anschauen kann. Allerdings ist es keine "echte" RFC822-Nachricht, da Exchange hier per Default eine TNEF-Mail ablegt.
Ein Programm, welches diese Nachricht also weiter verarbeiten will, muss das Format entsprechend auslesen können. Wenn Sie schon etwas üben wollen, habe ich ihnen hier diese Nachricht zum Download bereit gestellt.
e2k7foreignconnector.zip
Gepackte EML-Datei mit der Testmail an [FAX:1234]
Wenn sie nun selbst in der Situation sind, einen eigenen Connector zu entwickeln, dann benötigen Sie natürlich entsprechende Hilfsmittel, um diese Mails wieder aufzufassen und weiter zu verarbeiten. Microsoft liefert dazu einige Classen und Hilfen mit. (Auszug aus der Exchange 2007 Online Hilfe)
- Microsoft.Exchange.Data.Mime
Enables stream-based and DOM-based access to Multipurpose Internet Mail Extensions (MIME) data, including the ability to filter MIME content. - Microsoft.Exchange.Data.TextConverters
Provides classes and data structures that enable custom filtering of e-mail body content and conversion between several different formats, including HTML, RTF, and plain text. - Microsoft.Exchange.Data.iCalendar undMicrosoft.Exchange.Data.Tnef
Provide classes and data structures that let you read and write calendar items für appointments, meetings, and events. - Microsoft.Exchange.Data.Encoders
Provides classes and data structures that let you easily convert the encoding of an e-mail message.
Auf der Webseite http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=737392&SiteID=17 habe ich einen sehr ausführlichen Artikel eines Microsoft Entwicklers gefunden, den ich als Archiv hier gerne mal ablegen
Erläuterung zum Foreign Connector
Mails vom Connector zur Exchange Organisation
Möchte ein Connector nun eine Mail zurück zum Anwender senden, dann steht im einfach der Weg über SMTP offen. Ihr Connector sollte daher wissen, wie man selbst die entsprechenden Receive-Connectoren einer Exchange Organisation ausliest oder Sie müssen dies bei dem jeweiligen Produkt konfigurieren. Es ist immer eine gute Idee, wenn der Connector mit einem eigenen Dienstkonto läuft und sich der Connector auch per SMTP am Exchange Server authentifiziert. Das gleiche Konto kann der Connector ja auch nutzen, um mit dem Active Directory in Kontakt zu treten, um z.B. Daten aus den Benutzereigenschaften auszulesen.
Messagetracking
Mails, die zum Foreign Connector gehen, werden natürlich auch im Messagetracking protokolliert, hier am Beispiel einer Anbindung eines Faxservers (Cycos MRS):
EventId Source Sender Recipients MessageSubject ------- ------ ------ ---------- -------------- RECEIVE STORE... sender@example.com {IMCEAFAX-05251304813@example.com. testmail SEND GATEWAY sender@example.com {IMCEAFAX-05251304813@example.com.. testmail RECEIVE ADMIN IMCEAMRS-MAILBOX_POSTMASTER@ex.. {sender@example.com} testmail DELIVER STORE... IMCEAMRS-MAILBOX_POSTMASTER@ex.. {sender@example.com} testmail
Die erste Zeile zeigt die Mail vom Postfach zum Server und Zeile zwei routet die Mail an das Gateway. Hier habe ich einen "Fehler" produziert, der dann einen NDR erzeugt. Hier nutzt MRS allerdings das "Pickup"-Verzeichnis. (Zeile 3) welches dann in Zeile 4 zum Postfach zugeleitet wird.
Entfernen des Foreign Connectors
Eine klassische Deinstallation gibt es natürlich nicht. Der Eintrag in der Exchange Konfiguration wird einfach über einen Aufruf in der Exchange Management Shell wieder entfernt:
Remove-ForeignConnector -Identity "Foreign-FAX"
Natürlich kommt hier noch eine Sicherheitsabfrage aber keine Bestätigungsmeldung mehr. Ein "Get-ForeignConnector schafft daher Gewissheit. Das "Verzeichnis" selbst muss ebenfalls von Hand gelöscht werden.
Foreign Connector und Exchange Online
Solange der Foreign Connector einen Adressraum "SMTP" hat, der auch von Office 365 erreichbar ist, kann auch ein Postfach in der Cloud diese Connectoren nutzen. Wenn Sie aber hier mit eigenen Adressräumen, z.B. [FAX:<Rufnummer] arbeiten, dann kann die Cloud damit nichts anfangen.
Weitere Links
- Foreign Connectors
http://www.microsoft.com/technet/prodtechnol/exchange/e2k7help/21c6a7a9-f4d2-4359-9ac9-930701b63a4e.mspx - Foreign Connector Cmdlets
http://www.microsoft.com/technet/prodtechnol/exchange/e2k7help/a2b378a1-e9dd-4311-ab8b-e4cf2781ac7d.mspx - Microsoft Outlook MS-TNEF handling
http://www.dwheeler.com/essays/microsoft-outlook-tnef.html - TNEF
http://sourceforge.net/projects/tnef
Projekt um Inhalte aus WINMAIL.DAT zu extrahieren - WINMAIL.DAT Reader
http://www.kopf.com.br/WINMAIL.DAT/
Freeware um den Inhalt der WINMAIL.DAT zu lesen. - Transport Neutral Encapsulation Format
http://en.wikipedia.org/wiki/Transport_Neutral_Encapsulation_Format