WSH - Kontakt mit Mailadresse anlegen

Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.

Analog zum Anlegen eines Benutzers mit Postfach (siehe WSH - Benutzer mit Postfach anlegen) können Sie natürlich auch einen Kontakt im Active Directory anlegen. Solche Kontakte können ebenfalls "Mailenabled" werden, d.h. Sie verweisen auf eine Mailbox in einem anderen externen System.

AD-Felder und Exchange

Die allgemeinen Felder zu Kontakten entsprechend fast den Feldern der normalen Benutzer. Lesen Sie dazu die Seite AD LDAPFelder. für Kontakte kommen aber noch weitere Felder hinzu, denen wir unsere Aufmerksamkeit schenken sollten. Ein Kontakt fehlt zwar die SID aber dafür gibt es einige zusätzliche Einstellungen, die Sie schon in der MMC sehen können:

Zum einen findet sich auf der Karteikarte "Exchange - Allgemein" die Mailadresse des Kontakts. Dies muss nicht zwingend eine SMTP-Adresse sein. Zudem können hier weitere Optionen angegeben werden.

Aber auch auf der Karteikarte "Exchange - Erweitert", welche Sie erst in der erweiterten Ansicht der MMC sehen, gibt es eine sehr wichtige Einstellung. Die Steuerung des "MAPI-RTF-Formats" legt fest, ob Exchange an den Kontakt die Mails mit der "WINMAIL.DAT"-Anlage versendet oder die Mail doch als SMTP-Mail (Text oder HTML) versendet.

Diese Felder spiegeln sich auch im AD wieder:

Im Active Directory sind dann folgende Felder interessant:

TargetAddress

Unicode String
z.B. "SMTP:User@example.com"

Dieses Feld enthält die eigentliche Zieladresse des Kontakts. Es muss keine SMTP-Adresse sein, sondern es kann auch eine andere Adresse (FAX, MS-Mail, Notes o.ä.) sein. Allerdings muss Exchange oder der Client einen Weg können, diese Adressen zu verarbeiten und zuzustellen.

Die TargetAddress hat eine kleine Besonderheit: Exchange leitet die Mail immer über den passenden SMTP-Connector nach außen, selbst wenn die Domäne bei Exchange selbst im RUS eingetragen ist oder es sogar einen lokalen Empfänger mit dieser Adresse gibt !

ProxyAddresses

Unicode String (MultiValue)

Dieses Array enthält alle weiteren Adressen, unter denen der Kontakt innerhalb der Exchange Organisation erreichbar ist. Sie können solch einen Kontakt daher durchaus als Weiterleitung einsetzen. für gewöhnlich werden diese Adressen aber nicht genutzt..

mAPIRecipient

Boolean

Steuert, ob der Empfänger Outlook/Exchange einsetzt und weist Exchange damit an, die Mails mit einer WINMAIL.DAT-Anlage als RTF-Nachricht zu versenden

MailNickName

Unicode String

Enthält den Alias des Kontakts. Meist bildet der RUS anhand dieses Alias und der Empfängerrichtlinien die weiteren Mailadressen.

internetEncoding

integer

0000000111111111111100010 = 00262114 = Default Einstellungen verwenden
0000101100000000000000000 = 01441792 = Mime unformatiert + HTML

0000011100000000000000000 = 00917504 = Mime HTML
0000001100000000000000000 = 00393216 = Mime unformatiert
1010100110010110100000000 = 22228224 = UUEncode
0000000100000000000000000 = 00131072 = UUEncode + BinHex
Alle Angaben ohne Gewähr

Auch für das Anlegen eines Kontakts gilt, dass Sie weitere Exchange Eigenschaften setzen müssen bzw. der RUS einen Teil davon setzt. Details zu den Hintergründen finden Sie auf Hintergrund: Neuer Benutzer anlegen.

Kontakt per ADSI-Anlegen

Das Anlegen eines Exchange-Kontakts per ADSI/LDAP unterscheidet sich was nicht von dem Anlegen eines normalen Kontakts. Es müssen nur die Felder "MailNickName" und "TargetAddress" zusätzlich mit Informationen befüllt werden. Den Rest übernimmt der RUS.

Set ou = GetObject("LDAP://OU=test,DC=msxfaq,DC=net")
Set contact = ou.Create("User", "cn=kontakt1")
contact.Put "samAccountName", "kontakt1"
contact.givenName = "Kontakt"
contact.sn = "Test1"
contact.displayName = "Kontakt1"
contact.targetAddress = "kontakt1@example.com"
contact.MailNickName = kontakt1
contact.SetInfo
wscript.echo "Finished!"

Die Werte für "mAPIRecipient" und "internetEncoding" sind in der Standardeinstellung für die meisten Konfigurationen passend. Nur wenn Sie sicher sind, dass die von ihnen importierten Kontakte wirklich mit RTF-Nachrichten umgehen sollen (also MS-Mail, Outlook, Outlook Express oder Exchange verwenden), dann können Sie "mAPIRecipients = true" setzen, damit auch Einladungen und andere Formate sauber übertragen werden.

Skript 3: Import per LDIFDE

Zuletzt können Sie einen Benutzer noch mit LDIFDE anlegen lassen. Hier eine Beispieldatei mit einigen Feldern mehr als unbedingt erforderlich wären. Die Felder habe ich zur besseren Übersicht farbig gemacht. Achten Sie auf Zeilenumbrüche: Das Feld muss immer am Anfang stehen und je Zeile darf nur ein Feld sein.

dn: CN=kontakt1,CN=Users,DC=msxfaq,DC=local
changetype: add
objectClass: contact
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=msxfaq,DC=local
name: kontakt1
sn: kontakt1
givenName: Givenname
homePhone: +49(0)5251 304 600
streetAddress: Am Hoppenhof 32
postalCode: 33104
l: Paderborn
description: Net at Work GmbH
displayName: Testkontakt
mailNickname:
kontakt1
TargetAddress: SMTP:
kontakt1@example.com

Der Import dieser Datei legt mit als Benutzer an mit einem Postfach auf SRV01 an.

Weitere Programme und Skripte

Einige Leser der MSXFAQ haben ihre Codes mir zur Verfügung gestellt.
Viel Spaß beim Analysieren und Anpassen.

olcontact2ad.pl (Quelle unbekannt)
PERL um auslesen der Kontakte aus einem Outlook Kontaktordner und Import Als Kontakte im Active Directory. Sehr schönes Beispiel für den Zugriff aus Perl auf MAPI und LDAP

Weitere Links