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.

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"

New-ForeignConnector

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 Grou
p (DWBGZMFD01QNBJR),CN=Routing Groups,CN=Exchange Admi
nistrative Group (FYDIBOHF23SPDLT),CN=Administrative G
roups,CN=First Organization,CN=Microsoft Exchange,CN=S
ervices,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.

Mails von der Exchange Organisation zum Connector

Daher senden wir einfach per OWA oder Outlook eine Mail an die Adresse "Fax:1234".

Testmail to FAX

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

Queue Manager Warteschlange mit Fehler

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:

Eventlogmeldung ForeignConnector

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.

Explorer mit DropDirectory

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.

TNEF-Mail im DROP-Verzeichnis

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"
RemoveForeignConnector

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:<rufnuemmer] arbeiten, dann kann die Cloud damit nichts anfangen.

Weitere Links