Bekerja dengan File vCard (VCF) di C#
Artikel ini mencakup VCardContact kelas dari Aspose.Email.PersonalInfo.VCard namespace, yang membaca dan menulis file vCard (VCF) secara independen dari Outlook dan MAPI. Untuk membuat dan mengelola Outlook MapiContact item — yang juga dapat diekspor ke VCF — lihat Manajemen Kontak Outlook.
VCardContact vs MapiContact
Aspose.Email menampilkan kontak melalui dua kelas berbeda, dan memilih yang tepat menghindari banyak kebingungan:
- VCardContact (namespace Aspose.Email.PersonalInfo.VCard) — objek vCard murni. Gunakan ini ketika sumber dan target Anda adalah file vCard (VCF) dan Anda tidak memerlukan fitur Outlook/MAPI. Ini membaca dan menulis VCF secara langsung, mendukung vCard 2.1/3.0/4.0, beberapa kontak per file, dan pemuatan asinkron.
- MapiContact (namespace
Aspose.Email.Mapi) — sebuah kontak Outlook. Gunakan ini ketika Anda bekerja dengan MSG/PST atau membutuhkan properti spesifik MAPI.MapiContactjuga dapat mengimpor dari dan mengekspor ke VCF melaluiFromVCarddanSavemetode (lihat Manajemen Kontak Outlook).
Sisa artikel ini berfokus pada VCardContact.
Buat vCard dan Simpan
The VCardContact kelas memiliki konstruktor tanpa parameter dan menampilkan kumpulan properti bertipe kuat seperti InformasiIdentifikasi, Organisasi, Email, TelephoneNumbers, dan DeliveryAddresses.
Potongan kode berikut menunjukkan cara membuat kontak dari awal dan menyimpannya sebagai file 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 Properti Kontak
Selain nama dan email yang ditunjukkan di atas, sebuah VCardContact menampilkan model data vCard lengkap melalui kumpulan properti bertipe kuat. Potongan kode di bawah memperluas contact dibuat sebelumnya. Setiap koleksi dapat diberikan inisialisasi koleksi atau ditambahkan dengan Add.
Alamat Pos
Alamat pos berada di dalam DeliveryAddresses koleksi sebagai VCardDeliveryAddress item. The AddressType properti mengambil kombinasi dari VCardDeliveryAddressType bendera (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"
}
};
Nomor Telepon
Nomor telepon berada di dalam TelephoneNumbers koleksi sebagai VCardTelephoneNumber item. The TelephoneType properti mengambil kombinasi dari VCardTelephoneType bendera (VOICE, WORK, HOME, CELL, FAX, PAGER, PREF, dan lainnya).
contact.TelephoneNumbers = new VCardTelephoneNumberCollection
{
new VCardTelephoneNumber
{
TelephoneNumber = "(08) 9080 1183",
TelephoneType = VCardTelephoneType.WORK | VCardTelephoneType.VOICE
},
new VCardTelephoneNumber
{
TelephoneNumber = "(925) 599 3355",
TelephoneType = VCardTelephoneType.CELL
}
};
Posisi Geografis
The Geo properti menyimpan posisi global sebagai float lintang dan bujur.
contact.Geo = new VCardGeo
{
Latitude = 48.858844f,
Longitude = 2.294351f
};
Foto
Foto kontak diatur pada IdentificationInfo.Photo sebagai sebuah VCardPhoto. Itu dapat disematkan secara inline dari byte gambar atau direferensikan oleh URL. Format gambar diberikan oleh VCardPhotoType dan mode penyimpanan oleh 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
};
Label Alamat Terformat
Label adalah teks terformat, siap cetak untuk alamat pengiriman. Label berada di dalam Label koleksi sebagai VCardLabel item, masing-masing ditandai dengan tipe alamat.
contact.Labels = new VCardLabelCollection
{
new VCardLabel
{
AddressType = VCardDeliveryAddressType.WORK,
Address = "4 Darwinia Loop\r\nEighty Mile Beach WA 6725\r\nAustralia"
}
};
Baca Model Kembali
Setelah memuat vCard, kumpulan properti yang sama menampilkan data yang diurai.
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}");
}
Keamanan (Kunci Publik atau Sertifikat)
The Keamanan properti menampilkan kunci publik atau sertifikat otentikasi yang disimpan di vCard (the KEY properti). Ini SaveToPEM metode menulis kunci itu ke file 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");
}
Muat sebuah vCard
Gunakan statis VCardContact.Load metode untuk membaca vCard dari file atau stream. Setelah dimuat, properti kontak tersedia melalui kumpulan properti yang sama digunakan saat membuatnya.
// 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);
}
Muat dengan Enkoding Khusus
Untuk mengontrol enkoding teks yang digunakan saat membaca, berikan sebuah VCardLoadOptions objek dengan PreferredEncoding set properti.
var loadOptions = new VCardLoadOptions { PreferredEncoding = Encoding.UTF8 };
var contact = VCardContact.Load("contact.vcf", loadOptions);
Baca Beberapa Kontak dari Satu File
Sebuah file vCard dapat berisi lebih dari satu kontak. Gunakan statis IsMultiContacts metode untuk memeriksa apakah file atau stream berisi banyak kontak, dan LoadAsMultiple untuk membacanya semua ke dalam sebuah List<VCardContact>. Kedua metode memiliki overload file, stream, dan load-options:
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);
}
}
}
Muat Kontak Secara Asinkron
Untuk daftar kontak besar atau aplikasi I/O-bound (desktop, web, atau seluler), VCardContact menyediakan pemuatan asinkron yang tidak memblokir thread pemanggil. Gunakan LoadAsync untuk satu kontak dan LoadAsMultipleAsync untuk beberapa. Keduanya menerima sebuah 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);
}
Opsi Simpan
The VCardSaveOptions kelas menyesuaikan cara sebuah kontak ditulis:
- Version — versi vCard keluaran dari VCardVersion enumerasi:
V21(vCard 2.1, default),V30(3.0), atauV40(4.0). - PreferredTextEncoding — enkoding yang digunakan saat menulis file.
- UseExtensions — apakah diperluas (
X-) properti dapat ditulis. Defaultnya adalahtrue. ProductId— nilai yang ditulis kePRODIDproperti.
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);
Lihat Juga
- Manajemen Kontak Outlook — membuat, menyimpan, dan membaca Outlook
MapiContactitem, termasuk impor dan ekspor VCF. - Mengelola Kontak dalam File PST — menyimpan dan membaca kontak di dalam PST.