Kontaktfelder

Wer mit Outlook VBA, CDO oder anderen APIs auf Outlook Kontakte zugreift, möchte sicher gerne wissen, welche Felder per Default zur Verfügung stehen, wie diese heißen, welcher Inhalt sich darin wieder findet und wie diese Felder über verschiedene Schnittstellen erreichbar sind. Ich habe hier versucht, mit Outlook 2007 und anderen Clients eine Übersicht der häufigen Kontaktfelder zu erstellen. Zusätzliche benutzerdefinierte Felder habe ich nicht aufgeführt.

Der Basiskontakt

Dazu habe ich mit Outlook 2007 erst mal einen Kontakt angelegt, welcher möglichst alle Fehler "sprechend" gefüllt hat:

Outlook Musterkontakt 1 

Auch die zweite Karteikarte enthält Informationen

Outlook Musterkontakt 2

Alle Felder kann ich hier in einem Bild wiedergeben, da z.B. bei den Telefonnummern noch viel mehr Felder gepflegt werden können.

Outlook Ansicht als Liste

Outlook selbst bietet schon eine Möglichkeit an, die Felder eines Objekts als Liste anzuzeigen:

Outlook Kontaktfelder

Aber auch hier scheitert man allein an der Menge und der Beschränkung auf die Fenstergröße. Besser geht es, wenn man per VBA sich den Kontakt holt und über eine kleine Schleife die Properties ausgibt:

Sub dumpproperties(obitem As ContactItem)
    Dim property As ItemProperty für Each property In obitem.ItemProperties
        If VarType(property.Value) = vbString Then
            Debug.Print property.Name & ";" & property.Value
        Else
            Debug.Print property.Name & ";EMPTY"
        End If
    Next
End Sub

Damit lässt sich leicht einer Liste der Felder und Inhalte generieren. Ich habe mich zur Einfachheit auf "Strings" beschränkt.

Musterkontakt
kontaktfelder-muster.msg Als MSG Datei zum ablegen in Outlook
kontaktfelder.vcf Export als VCF-Datei

Liste der Felder

Hier eine Tabelle alle Stringfelder, ihres Property Namens, das Feld in Outlook und, soweit bekannt, die Ansicht in OWA, Mobilegeräten und anderen Protokollen. Feedback und Ergänzungen sind gerne willkommen.

Die genauen Zuordnungen der verschiedenen Mobilgeräte werde ich später nachreichen.

Property-Name Musterinhalt Outlook WinMobile BES Nokia
Suite
iPhone  

BillingInformation

Ja

 

 

 

 

 

Body

NotizenZeile1
NotizenZeile2

Ja

 

 

 

 

 

Categories

Ja

 

 

 

 

 

Companies

Ja

 

 

 

 

 

ConversationIndex

01C98627FAE3E415AC36B3A34F49BD71991FF17AEB9F

Ja

 

 

 

 

 

ConversationTopic

Vorname Nachname

Ja

 

 

 

 

 

CreationTime

 

Ja

 

 

 

 

 

EntryID

<<GUID>>

Ja

 

 

 

 

 

Importance

EMPTY

Ja

 

 

 

 

 

LastModificationTime

EMPTY

Ja

 

 

 

 

 

MessageClass

IPM.Contact

Ja

 

 

 

 

 

Mileage

Ja

 

 

 

 

 

NoAging

EMPTY

Ja

 

 

 

 

 

OutlookInternalVersion

EMPTY

Ja

 

 

 

 

 

OutlookVersion

12.0

Ja

 

 

 

 

 

Sensitivity

EMPTY

Ja

 

 

 

 

 

Size

EMPTY

Ja

 

 

 

 

 

Subject

Vorname Vorname2 Nachname Namenszusatz

Ja

 

 

 

 

 

UserProperties

EMPTY

Ja

 

 

 

 

 

Account

Ja

 

 

 

 

 

Anniversary

EMPTY

Ja

 

 

 

 

 

AssistantName

Assistent

Ja

 

 

 

 

 

AssistantTelephoneNumber

TelAssistent

Ja

 

 

 

 

 

Birthday

EMPTY

Ja

 

 

 

 

 

Business2TelephoneNumber

TelGeschäftlich2

Ja

 

 

 

 

 

BusinessAddress

GeschäftStrasseLine1
GeschäftStrasseLine2

GeschäftPLZ GeschäftOrt GeschäftBundesland

Ja

 

 

 

 

 

BusinessAddressCity

GeschäftOrt

Ja

 

 

 

 

 

BusinessAddressCountry

GeschäftLand

Ja

 

 

 

 

 

BusinessAddressPostalCode

GeschäftPLZ

Ja

 

 

 

 

 

BusinessAddressPostOfficeBox

Ja

 

 

 

 

 

BusinessAddressState

GeschäftBundesland

Ja

 

 

 

 

 

BusinessAddressStreet

GeschäftStrasseLine1
GeschäftStrasseLine2

Ja

 

 

 

 

 

BusinessFaxNumber

FaxGeschäftlich

Ja

 

 

 

 

 

BusinessHomePage

http://webseite

Ja

 

 

 

 

 

BusinessTelephoneNumber

TelGeschäftlich

Ja

 

 

 

 

 

CallbackTelephoneNumber

TelRückmeldung

Ja

 

 

 

 

 

CarTelephoneNumber

TelAuto

Ja

 

 

 

 

 

CompanyAndFullName

Firma
Nachname, Vorname Vorname2

Ja

 

 

 

 

 

CompanyLastFirstNoSpace

Ja

 

 

 

 

 

CompanyLastFirstSpaceOnly

Ja

 

 

 

 

 

CompanyMainTelephoneNumber

TelFirma

Ja

 

 

 

 

 

CompanyName

Firma

Ja

 

 

 

 

 

ComputerNetworkName

Ja

 

 

 

 

 

CustomerID

Ja

 

 

 

 

 

Department

Abteilung

Ja

 

 

 

 

 

Email1Address

mail1@example.com

Ja

 

 

 

 

 

Email1AddressType

SMTP

Ja

 

 

 

 

 

Email1DisplayName

Vorname Vorname2 Nachname Namenszusatz (mail1@example.com)

Ja

 

 

 

 

 

Email1EntryID

 ???????? ?Vorname Vorname2 Nachname Namenszusatz (mail1@example.com) SMTP mail1@example.com

Ja

 

 

 

 

 

Email2Address

mail2@example.com

Ja

 

 

 

 

 

Email2AddressType

SMTP

Ja

 

 

 

 

 

Email2DisplayName

Vorname Vorname2 Nachname Namenszusatz (mail2@example.com)

Ja

 

 

 

 

 

Email2EntryID

 ???????? ?Vorname Vorname2 Nachname Namenszusatz (mail2@example.com) SMTP mail2@example.com

Ja

 

 

 

 

 

Email3Address

mail3@example.com

Ja

 

 

 

 

 

Email3AddressType

SMTP

Ja

 

 

 

 

 

Email3DisplayName

Vorname Vorname2 Nachname Namenszusatz (mail3@example.com)

Ja

 

 

 

 

 

Email3EntryID

 ???????? ?Vorname Vorname2 Nachname Namenszusatz (mail3@example.com) SMTP mail3@example.com

Ja

 

 

 

 

 

FileAs

Nachname, Vorname Vorname2

Ja

 

 

 

 

 

FirstName

Vorname

Ja

 

 

 

 

 

FullName

Anrede Vorname Vorname2 Nachname Namenszusatz

Ja

 

 

 

 

 

FullNameAndCompany

Nachname, Vorname Vorname2

Ja

 

 

 

 

 

Firma

Ja

 

 

 

 

 

Gender

EMPTY

Ja

 

 

 

 

 

GovernmentIDNumber

Ja

 

 

 

 

 

Hobby

Ja

 

 

 

 

 

Home2TelephoneNumber

TelPrivat2

Ja

 

 

 

 

 

HomeAddress

PrivatStrasseLine1
PrivatStrasseLine2

PrivatPLZ PrivatOrt PrivatBundesland

Ja

 

 

 

 

 

HomeAddressCity

PrivatOrt

Ja

 

 

 

 

 

HomeAddressCountry

PrivatLand

Ja

 

 

 

 

 

HomeAddressPostalCode

PrivatPLZ

Ja

 

 

 

 

 

HomeAddressPostOfficeBox

Ja

 

 

 

 

 

HomeAddressState

PrivatBundesland

Ja

 

 

 

 

 

HomeAddressStreet

PrivatStrasseLine1

Ja

 

 

 

 

 

PrivatStrasseLine2

Ja

 

 

 

 

 

HomeFaxNumber

FaxPrivat

Ja

 

 

 

 

 

HomeTelephoneNumber

TelPrivat

Ja

 

 

 

 

 

Initials

V.V.N.

Ja

 

 

 

 

 

InternetFreeBusyAddress

http://InternetFreeBusy

Ja

 

 

 

 

 

ISDNNumber

TelISDN

Ja

 

 

 

 

 

JobTitle

Position

Ja

 

 

 

 

 

Journal

EMPTY

Ja

 

 

 

 

 

Language

Ja

 

 

 

 

 

LastFirstAndSuffix

Ja

 

 

 

 

 

LastFirstNoSpace

Ja

 

 

 

 

 

LastFirstNoSpaceCompany

Ja

 

 

 

 

 

LastFirstSpaceOnly

Ja

 

 

 

 

 

LastFirstSpaceOnlyCompany

Ja

 

 

 

 

 

LastName

Nachname

Ja

 

 

 

 

 

LastNameAndFirstName

Nachname, Vorname Vorname2

Ja

 

 

 

 

 

MailingAddress

GeschäftStrasseLine1
GeschäftStrasseLine2

GeschäftPLZ GeschäftOrt GeschäftBundesland

Ja

 

 

 

 

 

MailingAddressCity

GeschäftOrt

Ja

 

 

 

 

 

MailingAddressCountry

GeschäftLand

Ja

 

 

 

 

 

MailingAddressPostalCode

GeschäftPLZ

Ja

 

 

 

 

 

MailingAddressPostOfficeBox

Ja

 

 

 

 

 

MailingAddressState

GeschäftBundesland

Ja

 

 

 

 

 

MailingAddressStreet

GeschäftStrasseLine1
GeschäftStrasseLine2

Ja

 

 

 

 

 

ManagerName

Vorgesetzter

Ja

 

 

 

 

 

MiddleName

Vorname2

Ja

 

 

 

 

 

MobileTelephoneNumber

TelMobil

Ja

 

 

 

 

 

NetMeetingAlias

Ja

 

 

 

 

 

NetMeetingServer

Ja

 

 

 

 

 

NickName

Spitzname

Ja

 

 

 

 

 

OfficeLocation

Büro

Ja

 

 

 

 

 

OrganizationalIDNumber

Ja

 

 

 

 

 

OtherAddress

WeitereStraße1
WeitereStraße2

WeiterePLZ WeitereOrt WeitereBundesland

Ja

 

 

 

 

 

WeitereLand

Ja

 

 

 

 

 

OtherAddressCity

WeitereOrt

Ja

 

 

 

 

 

OtherAddressCountry

WeitereLand

Ja

 

 

 

 

 

OtherAddressPostalCode

WeiterePLZ

Ja

 

 

 

 

 

OtherAddressPostOfficeBox

Ja

 

 

 

 

 

OtherAddressState

WeitereBundesland

Ja

 

 

 

 

 

OtherAddressStreet

WeitereStraße1
WeitereStraße2

Ja

 

 

 

 

 

OtherFaxNumber

FaxWeitere

Ja

 

 

 

 

 

OtherTelephoneNumber

TelWeitere

Ja

 

 

 

 

 

PagerNumber

TelPager

Ja

 

 

 

 

 

PersonalHomePage

Ja

 

 

 

 

 

PrimaryTelephoneNumber

TelHaupttelefon

Ja

 

 

 

 

 

Profession

Beruf

Ja

 

 

 

 

 

RadioTelephoneNumber

TelFunkruf

Ja

 

 

 

 

 

SelectedMailingAddress

EMPTY

Ja

 

 

 

 

 

Spouse

Partnerin

Ja

 

 

 

 

 

Suffix

Namenszusatz

Ja

 

 

 

 

 

TelexNumber

TelTelex

Ja

 

 

 

 

 

Title

Anrede

Ja

 

 

 

 

 

TTYTDDTelephoneNumber

TelTexttelefon

Ja

 

 

 

 

 

User1

Ja

 

 

 

 

 

User2

Ja

 

 

 

 

 

User3

Ja

 

 

 

 

 

User4

Ja

 

 

 

 

 

WebPage

http://webseite

Ja

 

 

 

 

 

YomiCompanyName

Ja

 

 

 

 

 

YomiFirstName

Ja

 

 

 

 

 

YomiLastName

Ja

 

 

 

 

 

Links

EMPTY

Ja

 

 

 

 

 

LastFirstNoSpaceAndSuffix

Ja

 

 

 

 

 

DownloadState

EMPTY

Ja

 

 

 

 

 

IMAddress

imadresse@netatwork.de

Ja

 

 

 

 

 

MarkForDownload

EMPTY

Ja

 

 

 

 

 

IsConflict

EMPTY

Ja

 

 

 

 

 

AutoResolvedWinner

EMPTY

Ja

 

 

 

 

 

Conflicts

EMPTY

Ja

 

 

 

 

 

HasPicture

EMPTY

Ja

 

 

 

 

 

PropertyAccessor

EMPTY

Ja

 

 

 

 

 

TaskSubject

Vorname Vorname2 Nachname Namenszusatz

Ja

 

 

 

 

 

TaskDueDate

EMPTY

Ja

 

 

 

 

 

TaskStartDate

EMPTY

Ja

 

 

 

 

 

TaskCompletedDate

EMPTY

Ja

 

 

 

 

 

ToDoTaskOrdinal

EMPTY

Ja

 

 

 

 

 

ReminderOverrideDefault

EMPTY

Ja

 

 

 

 

 

ReminderPlaySound

EMPTY

Ja

 

 

 

 

 

ReminderSet

EMPTY

Ja

 

 

 

 

 

ReminderSoundFile

Ja

ReminderTime

EMPTY

Ja

 

 

 

 

 

IsMarkedAsTask

EMPTY

Ja

 

 

 

 

 

BusinessCardLayoutXml

<card xmlns="http://schemas....."/> ...</card>

Ja

 

 

 

 

 

Interessant ist hierbei, dass einige Telefonfelder, die Outlook als "Telefon 5 Ausgewählt" etc. bezeichnet, als englische Bezeichnungen ganz andere Namen haben (RadioTelephoneNumber).

Einfaches VBA-Makro zum Kopieren.

Sehr oft ergibt sich nun die Anforderung, Kontakte aus einem Ordner in einen anderen Ordner zu kopieren. Das kann man mit Outlook per "Drag and Drop" natürlich machen, was aber zu mehrfachen Kontakten führt. Habe ich die Kontakte im Ziel mit eigenen Daten erweitert, dann möchte ich aber nicht die Kontakte im Ziel löschen und neu kopieren. Ein "Merge" wäre sehr schön. Ein kleines VBA-Makro erlaubt diese Funktion relativ einfach, allerdings manuell, durchzuführen. Basierend auf dem Code wäre es aber sicher auch möglich, diese Funktion per VBScript und CDO auf einem Server ablaufen zu lassen.

Sub ContactCopy()

    ' get source Folder
    Dim SourceFolder As MAPIFolder
    Dim TargetFolder As MAPIFolder
    
    MsgBox "Bitte Quelle auswaehlen"
    Set SourceFolder = Outlook.GetNamespace("MAPI").PickFolder
    If SourceFolder.DefaultItemType <> olContactItem Then
        MsgBox "Abbruch: Ausgewählter Ordner ist kein Kontakt", vbCritical
        Exit Sub
    End If
    
    MsgBox "Bitte Ziel auswaehlen"
    Set TargetFolder = Outlook.GetNamespace("MAPI").PickFolder
    If TargetFolder.DefaultItemType <> olContactItem Then
        MsgBox "Abbruch: Ausgewählter Ordner ist kein Kontakt", vbCritical
        Exit Sub
    End If
    
    Debug.Print "Source Folder: " & SourceFolder.FolderPath
    Debug.Print "Target Folder: " & TargetFolder.FolderPath
    Dim sourceitem As ContactItem  'in einem Kontakt können auch DLs liegen !
    Dim targetitem As ContactItem
    Dim Updatecount As Integer für Each sourceitem In SourceFolder.Items.Restrict("[MessageClass]='IPM.Contact'")
        Debug.Print "  Contact: " & sourceitem.subject
        Set targetitem = TargetFolder.Items.Find("[FileAs] = '" & sourceitem.FileAs & "'")
        If targetitem Is Nothing Then
            Debug.Print "  Copy NEW Contact"
            Set targetitem = sourceitem.Copy
            targetitem.Move TargetFolder
        Else
            Debug.Print " Update Existing Contact" Updatecount = 0
            If sourceitem.Email1Address <> targetitem.Email1Address Then
                targetitem.Email1Address = sourceitem.Email1Address Updatecount = Updatecount + 1
            End If
            
            If sourceitem.BusinessTelephoneNumber <> targetitem.BusinessTelephoneNumber Then
                targetitem.BusinessTelephoneNumber = sourceitem.BusinessTelephoneNumber Updatecount = Updatecount + 1
            End If
            If Updatecount > 0 Then targetitem.Save
        End If
    Next
End Sub

Das Skript kopiert neue Kontakte komplett, während es bei bestehenden Kontakten einfach nur die Mailadresse und geschäftliche Telefonnummer von der Quelle im Ziel überschreibt.

Outlook Security Sicherung

Da es immer noch Viren gibt, die mit Vorliebe ihre Kontakte ausspähen möchten, verhindert Outlook zuverlässig jeden direkten Zugriff auf diese Daten und fordert von ihnen eine Bestätigung ein. Das gilt für jeden LESE-Zugriff auf die folgenden Felder

Email1Address , Email1AddressType , Email1DisplayName , Email1EntryID , Email2Address , Email2AddressType , Email2DisplayName , Email2EntryID , Email3Address , Email3AddressType , Email3DisplayName , Email3EntryID , NetMeetingAlias , ReferredBy , IMAddress , Body

Das Gilt natürlich nur beim Zugriff über Outlook. Wenn sie die CDO-Schnittstelle nutzen, unterbleibt diese Meldung.

Weitere Links