Praca z plikami vCard (VCF) w C#
Ten artykuł obejmuje VCardContact klasą z Aspose.Email.PersonalInfo.VCard przestrzeń nazw, która odczytuje i zapisuje pliki vCard (VCF) niezależnie od Outlooka i MAPI. Aby utworzyć i zarządzać Outlook MapiContact elementy — które również mogą być eksportowane do VCF — zobacz Zarządzanie kontaktami Outlook.
VCardContact vs MapiContact
Aspose.Email udostępnia kontakty poprzez dwie różne klasy, a wybór właściwej eliminuje wiele nieporozumień:
- VCardContact (przestrzeń nazw Aspose.Email.PersonalInfo.VCard) — czysty obiekt vCard. Użyj go, gdy źródłem i celem są pliki vCard (VCF) i nie potrzebujesz funkcji Outlook/MAPI. Odczytuje i zapisuje VCF bezpośrednio, obsługuje vCard 2.1/3.0/4.0, wiele kontaktów w jednym pliku oraz asynchroniczne ładowanie.
- MapiContact (przestrzeń nazw
Aspose.Email.Mapi) — kontakt Outlook. Użyj go, gdy pracujesz z MSG/PST lub potrzebujesz właściwości specyficznych dla MAPI.MapiContactmoże także importować i eksportować VCF przez jegoFromVCardiSavemetodach (zobacz Zarządzanie kontaktami Outlook).
Reszta tego artykułu skupia się na VCardContact.
Utwórz vCard i zapisz go
Ten VCardContact klasa ma konstruktor bez parametrów i udostępnia silnie typowane zestawy właściwości, takie jak IdentificationInfo, Organizacja, E‑maile, TelephoneNumbers, oraz DeliveryAddresses.
Poniższy fragment kodu pokazuje, jak zbudować kontakt od podstaw i zapisać go jako plik vCard (VCF).
using Aspose.Email.PersonalInfo.VCard;
var contact = new VCardContact
{
IdentificationInfo = new VCardIdentificationInfo
{
DisplayName = "Bertha Buell",
FullName = "Bertha A. Buell",
Nickname = "Bertie",
Birthday = new DateTime(1980, 5, 20)
},
Organization = new VCardOrganization
{
Organization = "Awthentikz",
Title = "Social work assistant"
},
Emails = new VCardEmailCollection
{
new VCardEmail
{
EmailAddress = "BerthaABuell@example.com",
EmailType = VCardEmailType.INTERNET
}
}
};
// Save as a vCard (VCF) file
contact.Save("contact.vcf");
Model właściwości kontaktu
Poza imieniem i e-mailem pokazanymi powyżej, VCardContact udostępnia pełny model danych vCard poprzez silnie typowane zestawy właściwości. Poniższe fragmenty kodu rozszerzają contact utworzonych wcześniej. Każdą kolekcję można zainicjować przy pomocy inicjalizatora kolekcji lub dodać do niej za pomocą Add.
Adresy pocztowe
Adresy pocztowe znajdują się w DeliveryAddresses kolekcję jako VCardDeliveryAddress elementów. AddressType właściwość przyjmuje kombinację VCardDeliveryAddressType flagi (HOME, WORK, POSTAL, PARCEL, DOM, INTL, PREF).
contact.DeliveryAddresses = new VCardDeliveryAddressCollection
{
new VCardDeliveryAddress
{
AddressType = VCardDeliveryAddressType.WORK | VCardDeliveryAddressType.PREF,
Street = "4 Darwinia Loop",
Locality = "Eighty Mile Beach",
Region = "WA",
PostalCode = "6725",
CountryName = "Australia"
}
};
Numery telefonów
Numery telefonów znajdują się w TelephoneNumbers kolekcję jako VCardTelephoneNumber elementów. TelephoneType właściwość przyjmuje kombinację VCardTelephoneType flagi (VOICE, WORK, HOME, CELL, FAX, PAGER, PREF, i więcej).
contact.TelephoneNumbers = new VCardTelephoneNumberCollection
{
new VCardTelephoneNumber
{
TelephoneNumber = "(08) 9080 1183",
TelephoneType = VCardTelephoneType.WORK | VCardTelephoneType.VOICE
},
new VCardTelephoneNumber
{
TelephoneNumber = "(925) 599 3355",
TelephoneType = VCardTelephoneType.CELL
}
};
Pozycja geograficzna
Ten Geo właściwość przechowuje globalną pozycję jako float szerokość i długość geograficzna.
contact.Geo = new VCardGeo
{
Latitude = 48.858844f,
Longitude = 2.294351f
};
Zdjęcie
Zdjęcie kontaktu ustawiane jest na IdentificationInfo.Photo jako VCardPhoto. Może być osadzona inline z bajtami obrazu lub odwołana przez URL. Format obrazu określany jest przez VCardPhotoType i tryb przechowywania przez VCardValueLocation.
// Embed the image bytes inline
contact.IdentificationInfo.Photo = new VCardPhoto
{
Data = File.ReadAllBytes("portrait.jpg"),
PhotoType = VCardPhotoType.JPEG,
ValueLocation = VCardValueLocation.INLINE
};
// Or reference an external image by URL
contact.IdentificationInfo.Photo = new VCardPhoto
{
Uri = "https://example.com/portrait.jpg",
PhotoType = VCardPhotoType.JPEG,
ValueLocation = VCardValueLocation.URL
};
Sformatowane etykiety adresowe
Etykieta to sformatowany, gotowy do druku tekst adresu dostawy. Etykiety znajdują się w Labels kolekcję jako VCardLabel elementy, każdy oznaczony typem adresu.
contact.Labels = new VCardLabelCollection
{
new VCardLabel
{
AddressType = VCardDeliveryAddressType.WORK,
Address = "4 Darwinia Loop\r\nEighty Mile Beach WA 6725\r\nAustralia"
}
};
Odczytaj model z powrotem
Po załadowaniu vCard, te same zestawy właściwości udostępniają przetworzone dane.
var loaded = VCardContact.Load("contact.vcf");
Console.WriteLine(loaded.IdentificationInfo?.DisplayName);
foreach (var address in loaded.DeliveryAddresses)
{
Console.WriteLine($"{address.AddressType}: {address.Street}, {address.Locality}");
}
foreach (var phone in loaded.TelephoneNumbers)
{
Console.WriteLine($"{phone.TelephoneType}: {phone.TelephoneNumber}");
}
if (loaded.Geo != null)
{
Console.WriteLine($"Geo: {loaded.Geo.Latitude}, {loaded.Geo.Longitude}");
}
Bezpieczeństwo (klucz publiczny lub certyfikat)
Ten Security właściwość udostępnia klucz publiczny lub certyfikat uwierzytelniający przechowywany w vCard ( KEY właściwość). Jej SaveToPEM metoda zapisuje ten klucz do pliku PEM.
var signed = VCardContact.Load("signed.vcf");
if (signed.Security != null && signed.Security.Key != null)
{
Console.WriteLine("Key type: " + signed.Security.Type);
// Export the embedded public key / certificate to a PEM file
signed.Security.SaveToPEM("public-key.pem");
}
Ładuj vCard
Użyj statycznej VCardContact.Load metoda odczytu vCard z pliku lub strumienia. Po załadowaniu właściwości kontaktu są dostępne poprzez te same zestawy właściwości użyte przy ich tworzeniu.
// Load from a file
var contact = VCardContact.Load("contact.vcf");
Console.WriteLine(contact.IdentificationInfo.DisplayName);
// Load from a stream
using (var stream = File.OpenRead("contact.vcf"))
{
var fromStream = VCardContact.Load(stream);
}
Ładuj z określonym kodowaniem
Aby kontrolować kodowanie tekstu używane podczas odczytu, przekaż VCardLoadOptions obiekt z jego PreferredEncoding zestaw właściwości.
var loadOptions = new VCardLoadOptions { PreferredEncoding = Encoding.UTF8 };
var contact = VCardContact.Load("contact.vcf", loadOptions);
Odczytaj wiele kontaktów z jednego pliku
Plik vCard może zawierać więcej niż jeden kontakt. Użyj statycznej IsMultiContacts metoda sprawdzająca, czy plik lub strumień zawiera wiele kontaktów, oraz LoadAsMultiple aby odczytać je wszystkie do List<VCardContact>. Obie metody mają przeciążenia dla pliku, strumienia i opcji ładowania:
static bool IsMultiContacts(string filePath)/IsMultiContacts(Stream stream)static List<VCardContact> LoadAsMultiple(string filePath)/LoadAsMultiple(string filePath, VCardLoadOptions options)static List<VCardContact> LoadAsMultiple(Stream stream)/LoadAsMultiple(Stream stream, VCardLoadOptions options)
using (var stream = new FileStream("contacts.vcf", FileMode.Open, FileAccess.Read))
{
if (VCardContact.IsMultiContacts(stream))
{
List<VCardContact> contacts = VCardContact.LoadAsMultiple(stream);
foreach (var contact in contacts)
{
Console.WriteLine(contact.IdentificationInfo.DisplayName);
}
}
}
Ładuj kontakty asynchronicznie
Dla dużych list kontaktów lub aplikacji o dużym obciążeniu I/O (desktop, web lub mobile), VCardContact zapewnia asynchroniczne ładowanie, które nie blokuje wątku wywołującego. Użyj LoadAsync dla pojedynczego kontaktu i LoadAsMultipleAsync dla kilku. Oba akceptują CancellationToken.
// A single contact
var contact = await VCardContact.LoadAsync("contact.vcf", CancellationToken.None);
Console.WriteLine(contact.IdentificationInfo.DisplayName);
// Multiple contacts
var contacts = await VCardContact.LoadAsMultipleAsync(
"contacts.vcf", new VCardLoadOptions(), CancellationToken.None);
foreach (var loaded in contacts)
{
Console.WriteLine(loaded.IdentificationInfo.DisplayName);
}
Opcje zapisu
Ten VCardSaveOptions klasa dostosowuje sposób zapisu kontaktu:
- Version — wersja wyjściowa vCard z VCardVersion enumeracji:
V21(vCard 2.1, domyślnie),V30(3.0), lubV40(4.0). - PreferredTextEncoding — kodowanie używane przy zapisywaniu pliku.
- UseExtensions — czy rozszerzone (
X-) właściwości mogą być zapisywane. Domyślnie totrue. ProductId— wartość zapisana doPRODIDwłaściwość.
var contact = VCardContact.Load("contact.vcf");
var saveOptions = new VCardSaveOptions
{
Version = VCardVersion.V30, // write vCard 3.0 (default is V21)
PreferredTextEncoding = Encoding.UTF8, // encoding used when writing
UseExtensions = true, // allow extended (X-) properties
ProductId = "My Company" // PRODID value
};
contact.Save("contact_v3.vcf", saveOptions);
Zobacz także
- Zarządzanie kontaktami Outlook — tworzyć, zapisywać i odczytywać Outlook
MapiContactelementy, w tym import i eksport VCF. - Zarządzanie kontaktami w plikach PST — przechowywać i odczytywać kontakty w PST.