Kontakte von Outlook aufs iPhone übertragen

Ein direkter Import von Microsoft Outlook Kontakten in das iPhone wird von Apple nicht unterstützt.

Outlook selbst erlaubt für den Export von Daten nur wenig Möglichkeiten.

Im Menüpunkt Datei > Öffnen und Exportieren den Eintrag Importieren / Exportieren anklicken:

Kontakte von Outlook aufs iPhone übertragen

... und In Datei exportieren auswählen:

Kontakte von Outlook aufs iPhone übertragen

Untersützt werden lediglich Durch Trennzeichen getrennte Werte und Outlook-Datendatei (.pst):

Kontakte von Outlook aufs iPhone übertragen

Die erste Option erzeugte eine CSV Datei (Comma Separated Values), die zweite eine Datei im Microsoft eigenen PST (Personal STore) Format.
Da beide Format vom iPhone nicht unterstützt werden, gehe ich hier nicht weiter darauf ein.

Um Kontakte auszutauschen gibt es bereits seit vielen Jahren einen Standard, der von den meisten Programmen unterstützt wird: vCard auch bekannt unter VCF (Virtual Contact File)). Dieser Standard ist im RFC 6350 festgelegt und stellt die Basis für den folgenden Lösungsvorschlag dar.

Outlook bietet keine Möglichkeit alle Kontakte als vCards zu exportieren, lediglich das Speichern einzelner Kontakte ist möglich.
Beliebigen Kontakt öffnen und Datei > Speichern unter wählen.

Kontakte von Outlook aufs iPhone übertragen

Bei der erzeugten VCF Datei (in diesem Beispiel Max Mustermann.vcf) handelt es sich um eine normale Textdatei,
die mit einem beliebigen Text Editor geöffnet werden kann. Ich nutze dafür Notepad++, aber auch der in Windows verfübare
Editor ist für diesen Zweck vollkommen ausreichend.

In diesem Outlook Kontakt wurde lediglich der Vorname, der Nachname und die Mobilfunknummer eingepflegt.
Der Inhalt der VCF Datei ist entsprechend kurz und einfach zu verstehen:

BEGIN:VCARD
VERSION:2.1
N;LANGUAGE=de:Mustermann;Max
FN:Max Mustermann
TEL;CELL;VOICE:+49 177 1234567
END:VCARD

Hinweis:
Abhängig von der benutzten Outlook Version (in diesem Beispiel Outlook 2019) können weitere Felder/Zeilen enthalten sein.
Outlook ist leider etwas "geschwätzig" und speichert teilweise Attribute, die nicht benötigt werden.

Zur Erklärung der kurzen VCF Datei:

Wie kommt jetzt die vCard aufs iPhone?

Die einfachste Variante: über einen Browser bei www.icloud.com mit der Apple-ID anmelden und Kontakte auswählen.
In diesem Beispiel ist noch kein Kontakt in icloud.com vorhanden:

Kontakte von Outlook aufs iPhone übertragen

Durch Klicken auf das Zahnrad öffnet sich folgender Dialog:

Kontakte von Outlook aufs iPhone übertragen

Jetzt nur noch die abgespeicherte vCard auswählen und übernehmen. Und schon taucht das erste Problem auf:

Kontakte von Outlook aufs iPhone übertragen

Wo liegt der Fehler?

Ein Klick auf Mehr Infos hilft leider nicht weiter.

Lösung: Öffnen der VCF Datei mit einem Texteditor und Ändern der Version 2.1 in 3.0. Abspeichern und erneut in icloud.com importieren.
Das vCard Format von Outlook 2019 (Version 2.1) ist leider nicht mit dem vCard Format kompatibel, das icloud.com erwartet.
Hier scheint mindestens Version 3.0 erforderlich zu sein - auch wenn sich außer der Version in der vCard nichts geändert hat.

Alternativ zu Zahnrad und vCard importieren ... kann der Kontakt auch vom Explorer in icloud.com gezogen werden ("drag and drop").

Jetzt befindet sich der erste Kontakt auf iCloud:

Kontakte von Outlook aufs iPhone übertragen

Es wird empfohlen im iPhone unter Einstellungen > Benutzer > iCloud im Bereich APPS, DIE ICLOUD VERWENDEN die Kontakte auf Ein
zu stellen. Damit werden die Kontakte automatisch synchronisiert: eine importierte vCard steht automatisch auf dem iPhone zur Verfügung.
Und umgekehrt: wird ein neuer Kontakt im iPhone erstellt, wird dieser automatisch nach iCloud synchronisiert.

Kontakte von Outlook aufs iPhone übertragen

Wie übertrage ich jetzt dutzende oder hunderte von vCards auf das iPhone?

Da Outlook keinen Export aller Kontakte als vCards zur Verfügung stellt, schlagen einige Quellen einen Trick vor:
Hinweise:
Die Anzahl der Visitenkarten, die in einer E-Mail enthalten sein können, ist mir nicht bekannt.
Ich habe versucht alle Kontakte (ca. 550) in einer E-Mail weiterzuleiten. Dabei stürzte Outlook komplett ab.
Auch eine Reduktion auf 100 Kontakte führt zum Absturz. Mit 50 hat es funktioniert.

Es muss doch eine andere Möglichkeit geben die vCards zu erstellen?

Mit etwas Programmieraufwand in Outlook lassen sich nicht nur alle Kontakte auf einmal als vCards abspeichern,
es können auch die gewünschten Informationen extrahiert werden!

Geht es nicht einfacher?

Es gibt einige Tools im Internet, die entsprechende Import- und Export Funktionen nicht nur für Kontakte anbieten.
Allerdings sind diese durchweg kostenpflichtig. Für den einmaligen Import meiner Kontakte war ich nicht bereit in ein Tool zu investieren
und kann daher keine Empfehlung aussprechen. Einfach einmal nach z.B. iPhone Import Tools suchen.


Sub OutlookKontakte_vCard()
Dim oOutlook As Object ' Outlook.Application
Dim oNameSpace As Object 'Outlook.Namespace
Dim oOrdner As Object 'Outlook.Ordner
Dim oItem As Object
Dim oPrp As Object
Dim temp As String
Dim counter As Integer
Set oOutlook = GetObject(, "Outlook.Application") ' Outlook verbinden
Set oNameSpace = oOutlook.GetNamespace("MAPI")
Set oOrdner = oNameSpace.GetDefaultFolder(10) ' 10 = Ordner Kontakte
counter = 1
For Each oItem In oOrdner.items
With oItem
If .Class = 40 Then ' 40 = Kontakt
Set fs = CreateObject("ADODB.Stream")
fs.Type = 2 ' text
fs.Charset = "utf-8"
fs.Open
temp = "BEGIN:VCARD" + vbCrLf
temp = temp + "VERSION:3.0" + vbCrLf
temp = temp + "N:" + .LastName + ";" + .FirstName + vbCrLf
temp = temp + "FN:" + .FullName + vbCrLf
If .CompanyName > "" Then
temp = temp + "ORG:" + .CompanyName
If .Department > "" Then temp = temp + ";" + .Department
temp = temp + vbCrLf
End If
If .JobTitle > "" Then temp = temp + "TITLE:" + .JobTitle + vbCrLf
If .NickName > "" Then temp = temp + "NICKNAME:" + .NickName + vbCrLf
If .Body > "" Then temp = temp + "NOTE:" + Replace(.Body, vbCrLf, "\n") + vbCrLf
If .BusinessTelephoneNumber > "" Then temp = temp + "TEL;WORK;VOICE:" + .BusinessTelephoneNumber + vbCrLf
If .Business2TelephoneNumber > "" Then temp = temp + "TEL;WORK;VOICE:" + .Business2TelephoneNumber + vbCrLf
If .HomeTelephoneNumber > "" Then temp = temp + "TEL;HOME;VOICE:" + .HomeTelephoneNumber + vbCrLf
If .MobileTelephoneNumber > "" Then temp = temp + "TEL;CELL;VOICE:" + .MobileTelephoneNumber + vbCrLf
If .OtherTelephoneNumber > "" Then temp = temp + "TEL;VOICE:" + .OtherTelephoneNumber + vbCrLf
If .BusinessAddressCity > "" Then
temp = temp + "ADR;WORK:;;"
If .BusinessAddressStreet > "" Then temp = temp + .Replace(.BusinessAddressStreet, vbCrLf, ", ")
temp = temp + ";"
If .BusinessAddressCity > "" Then temp = temp + .BusinessAddressCity
temp = temp + ";"
If .BusinessAddressState > "" Then temp = temp + .BusinessAddressState
temp = temp + ";"
If .BusinessAddressPostalCode > "" Then temp = temp + .BusinessAddressPostalCode
temp = temp + ";"
If .BusinessAddressCountry > "" Then temp = temp + .BusinessAddressCountry
temp = temp + vbCrLf
End If
If .HomeAddressCity > "" Then
temp = temp + "ADR;HOME;PREF:;;"
If .HomeAddressStreet > "" Then temp = temp + .Replace(.HomeAddressStreet, vbCrLf, ", ")
temp = temp + ";"
If .HomeAddressCity > "" Then temp = temp + .HomeAddressCity
temp = temp + ";"
If .HomeAddressState > "" Then temp = temp + .HomeAddressState
temp = temp + ";"
If .HomeAddressPostalCode > "" Then temp = temp + .HomeAddressPostalCode
temp = temp + ";"
If .HomeAddressCountry > "" Then temp = temp + .HomeAddressCountry
temp = temp + vbCrLf
End If
If .OtherAddressCity > "" Then
temp = temp + "ADR;POSTAL:;;"
If .OtherAddressStreet > "" Then temp = temp + .Replace(.OtherAddressStreet, vbCrLf, ", ")
temp = temp + ";"
If .OtherAddressCity > "" Then temp = temp + .OtherAddressCity
temp = temp + ";"
If .OtherAddressState > "" Then temp = temp + .OtherAddressState
temp = temp + ";"
If .OtherAddressPostalCode > "" Then temp = temp + .OtherAddressPostalCode
temp = temp + ";"
If .OtherAddressCountry > "" Then temp = temp + .OtherAddressCountry
temp = temp + vbCrLf
End If
If .Email1Address > "" Then temp = temp + "EMAIL;PREF;INTERNET:" + .Email1Address + vbCrLf
If .Email2Address > "" Then temp = temp + "EMAIL;INTERNET:" + .Email2Address + vbCrLf
If .Email3Address > "" Then temp = temp + "EMAIL;INTERNET:" + .Email3Address + vbCrLf
If .Birthday > "" Then ' Format in Germany: 13.08.1960
If Len(.Birthday) = 10 And InStr(.Birthday, ".") Then
If CInt(Right(.Birthday, 4) > 1900) And CInt(Right(.Birthday, 4) < 2030) Then temp = temp + "BDAY:" + Right(.Birthday, 4) + "-" + Mid(.Birthday, 4, 2) + "-" + Left(.Birthday, 2) + vbCrLf
End If
End If
temp = temp + "END:VCARD" + vbCrLf
fs.WriteText temp
fs.SaveToFile "C:\_\vcards\" + .FullName + " (" + Trim(Str(counter)) + ").vcf", 2
counter = counter + 1
fs.Close
End If
End With
Next oItem
End Sub