Trabajando con Contactos en Archivos PST
Agregar Contacto a PST
Con Aspose.Email, puedes agregar un MapiContact a la subcarpeta de Contactos de un archivo PST que hayas creado o cargado. A continuación se presentan los pasos para agregar MapiContact a un PST:
- Crea un objeto MapiContact.
- Establece las propiedades de MapiContact utilizando diferentes constructores y métodos.
- Crea un PST utilizando el método PersonalStorage.Create().
- Crea una carpeta predefinida (Contactos) en la raíz del archivo PST accediendo a la carpeta raíz y luego llamando al método AddMapiMessageItem().
El siguiente fragmento de código te muestra cómo crear un MapiContact y luego agregarlo a la carpeta de contactos de un archivo PST recién creado.
For complete examples and data files, please go to https://github.com/kashifiqb/Aspose.Email-for-C | |
System::String dataDir = RunExamples::GetDataDir_Outlook(); | |
// Create three Contacts | |
System::SharedPtr<MapiContact> contact1 = System::MakeObject<MapiContact>(L"Sebastian Wright", L"SebastianWright@dayrep.com"); | |
System::SharedPtr<MapiContact> contact2 = System::MakeObject<MapiContact>(L"Wichert Kroos", L"WichertKroos@teleworm.us", L"Grade A Investment"); | |
System::SharedPtr<MapiContact> contact3 = System::MakeObject<MapiContact>(L"Christoffer van de Meeberg", L"ChristoffervandeMeeberg@teleworm.us", L"Krauses Sofa Factory", L"046-630-4614046-630-4614"); | |
// Contact #4 | |
System::SharedPtr<MapiContact> contact4 = System::MakeObject<MapiContact>(); | |
contact4->set_NameInfo(System::MakeObject<MapiContactNamePropertySet>(L"Margaret", L"J.", L"Tolle")); | |
contact4->get_PersonalInfo()->set_Gender(Aspose::Email::Outlook::MapiContactGender::Female); | |
contact4->set_ProfessionalInfo(System::MakeObject<MapiContactProfessionalPropertySet>(L"Adaptaz", L"Recording engineer")); | |
contact4->get_PhysicalAddresses()->get_WorkAddress()->set_Address(L"4 Darwinia Loop EIGHTY MILE BEACH WA 6725"); | |
contact4->get_ElectronicAddresses()->set_Email1(System::MakeObject<MapiContactElectronicAddress>(L"Hisen1988", L"SMTP", L"MargaretJTolle@dayrep.com")); | |
contact4->get_Telephones()->set_BusinessTelephoneNumber(L"(08)9080-1183"); | |
contact4->get_Telephones()->set_MobileTelephoneNumber(L"(925)599-3355(925)599-3355"); | |
// Contact #5 | |
System::SharedPtr<MapiContact> contact5 = System::MakeObject<MapiContact>(); | |
contact5->set_NameInfo(System::MakeObject<MapiContactNamePropertySet>(L"Matthew", L"R.", L"Wilcox")); | |
contact5->get_PersonalInfo()->set_Gender(Aspose::Email::Outlook::MapiContactGender::Male); | |
contact5->set_ProfessionalInfo(System::MakeObject<MapiContactProfessionalPropertySet>(L"Briazz", L"Psychiatric aide")); | |
contact5->get_PhysicalAddresses()->get_WorkAddress()->set_Address(L"Horner Strasse 12 4421 SAASS"); | |
contact5->get_Telephones()->set_BusinessTelephoneNumber(L"0650 675 73 300650 675 73 30"); | |
contact5->get_Telephones()->set_HomeTelephoneNumber(L"(661)387-5382(661)387-5382"); | |
// Contact #6 | |
System::SharedPtr<MapiContact> contact6 = System::MakeObject<MapiContact>(); | |
contact6->set_NameInfo(System::MakeObject<MapiContactNamePropertySet>(L"Bertha", L"A.", L"Buell")); | |
contact6->set_ProfessionalInfo(System::MakeObject<MapiContactProfessionalPropertySet>(L"Awthentikz", L"Social work assistant")); | |
contact6->get_PersonalInfo()->set_PersonalHomePage(L"B2BTies.com"); | |
contact6->get_PhysicalAddresses()->get_WorkAddress()->set_Address(L"Im Astenfeld 59 8580 EDELSCHROTT"); | |
contact6->get_ElectronicAddresses()->set_Email1(System::MakeObject<MapiContactElectronicAddress>(L"Experwas", L"SMTP", L"BerthaABuell@armyspy.com")); | |
contact6->set_Telephones(System::MakeObject<MapiContactTelephonePropertySet>(L"06605045265")); | |
// Load the Outlook file | |
System::String path = dataDir + L"SampleContacts_out.pst"; | |
if (System::IO::File::Exists(path)) | |
{ | |
System::IO::File::Delete(path); | |
} | |
{ | |
System::SharedPtr<PersonalStorage> personalStorage = PersonalStorage::Create(dataDir + L"SampleContacts_out.pst", Aspose::Email::Outlook::Pst::FileFormatVersion::Unicode); | |
System::SharedPtr<FolderInfo> contactFolder = personalStorage->CreatePredefinedFolder(L"Contacts", Aspose::Email::Outlook::Pst::StandardIpmFolder::Contacts); | |
contactFolder->AddMapiMessageItem(contact1); | |
contactFolder->AddMapiMessageItem(contact2); | |
contactFolder->AddMapiMessageItem(contact3); | |
contactFolder->AddMapiMessageItem(contact4); | |
contactFolder->AddMapiMessageItem(contact5); | |
contactFolder->AddMapiMessageItem(contact6); | |
} |
Guardar información de contactos desde archivo PST en formato MSG
Este artículo explica cómo acceder a la información de contacto desde un archivo PST de Outlook y guardar el contacto en el disco en formato MSG. Las clases PersonalStorage y MapiContact se utilizan para obtener y mostrar la información de contacto. Los pasos para obtener la información de contacto son:
- Carga el archivo PST en la clase PersonalStorage.
- Navega por la carpeta de Contactos.
- Obtén el contenido de la carpeta de Contactos para obtener la colección de mensajes.
- Recorre la colección de mensajes.
- Llama al método PersonalStorage.ExtractContactInfo() para obtener la información de contacto en la clase MapiContact. Usa las propiedades de la clase MapiContact para acceder a la información de contacto.
- Llama al método PersonalStorage.ExtractMessage() para obtener la información de contacto en la clase MapiMessage.
- Llama al método MapiMessage.Save() para guardar el contacto en el disco en formato MSG.
El siguiente fragmento de código te muestra cómo recuperar toda la información de contacto del archivo PST y guardarla en el disco en formato MSG.
For complete examples and data files, please go to https://github.com/kashifiqb/Aspose.Email-for-C | |
// Load the Outlook file | |
System::String dataDir = Examples::CSharp::Email::RunExamples::GetDataDir_Outlook(); | |
// Load the Outlook PST file | |
System::SharedPtr<PersonalStorage> personalStorage = PersonalStorage::FromFile(dataDir + L"SampleContacts.pst"); | |
// Get the Contacts folder | |
System::SharedPtr<FolderInfo> folderInfo = personalStorage->get_RootFolder()->GetSubFolder(L"Contacts"); | |
// Loop through all the contacts in this folder | |
System::SharedPtr<MessageInfoCollection> messageInfoCollection = folderInfo->GetContents(); | |
{ | |
auto messageInfo_enumerator = (messageInfoCollection)->GetEnumerator(); | |
decltype(messageInfo_enumerator->get_Current()) messageInfo; | |
while (messageInfo_enumerator->MoveNext() && (messageInfo = messageInfo_enumerator->get_Current(), true)) | |
{ | |
// Get the contact information | |
System::SharedPtr<MapiMessage> mapi = personalStorage->ExtractMessage(messageInfo); | |
System::SharedPtr<MapiContact> contact = System::DynamicCast<Aspose::Email::Outlook::MapiContact>(mapi->ToMapiMessageItem()); | |
// Display some contents on screen | |
System::Console::WriteLine(System::String(L"Name: ") + contact->get_NameInfo()->get_DisplayName()); | |
// Save to disk in MSG format | |
if (contact->get_NameInfo()->get_DisplayName() != nullptr) | |
{ | |
System::SharedPtr<MapiMessage> message = personalStorage->ExtractMessage(messageInfo); | |
// Get rid of illegal characters that cannot be used as a file name | |
System::String messageName = message->get_Subject().Replace(L":", L" ").Replace(L"\\", L" ").Replace(L"?", L" ").Replace(L"/", L" "); | |
message->Save(dataDir + L"Contacts\\" + messageName + L"_out.msg"); | |
} | |
} | |
} |
Guardar información de Contactos desde archivo PST en formato VCF
Este artículo muestra cómo acceder a la información de contacto desde un archivo PST de Microsoft Outlook y guardar el contacto en el disco en formato vCard (VCF). Utiliza las clases PersonalStorage y MapiContact para obtener información de contacto del archivo PST. Para obtener la información de contacto:
- Carga el archivo PST en la clase PersonalStorage.
- Navega por la carpeta de Contactos.
- Obtén el contenido de la carpeta de Contactos para obtener la colección de mensajes.
- Recorre la colección de mensajes.
- Llama al método PersonalStorage.ExtractMessage() para obtener la información de contacto en la clase MapiContact.
- Utiliza diferentes propiedades de la clase MapiContact para acceder a la información de contacto.
El programa a continuación carga un archivo PST desde el disco y guarda todos los contactos en formato vCard (VCF). Los archivos VCF se pueden utilizar en cualquier otro programa que pueda cargar el archivo de contacto estándar vCard. Si abres cualquier archivo VCF en Microsoft Outlook, se verá como el de la siguiente captura de pantalla.
![]() |
---|
El siguiente fragmento de código te muestra cómo exportar contactos de Outlook PST a formato vCard (VCF). |
For complete examples and data files, please go to https://github.com/kashifiqb/Aspose.Email-for-C | |
// Load the Outlook file | |
System::String dataDir = RunExamples::GetDataDir_Outlook(); | |
// Load the Outlook PST file | |
System::SharedPtr<PersonalStorage> personalStorage = PersonalStorage::FromFile(dataDir + L"Outlook.pst"); | |
// Get the Contacts folder | |
System::SharedPtr<FolderInfo> folderInfo = personalStorage->get_RootFolder()->GetSubFolder(L"Contacts"); | |
// Loop through all the contacts in this folder | |
System::SharedPtr<MessageInfoCollection> messageInfoCollection = folderInfo->GetContents(); | |
{ | |
auto messageInfo_enumerator = (messageInfoCollection)->GetEnumerator(); | |
decltype(messageInfo_enumerator->get_Current()) messageInfo; | |
while (messageInfo_enumerator->MoveNext() && (messageInfo = messageInfo_enumerator->get_Current(), true)) | |
{ | |
// Get the contact information | |
System::SharedPtr<MapiContact> contact = System::DynamicCast<Aspose::Email::Outlook::MapiContact>(personalStorage->ExtractMessage(messageInfo)->ToMapiMessageItem()); | |
// Display some contents on screen | |
System::Console::WriteLine(System::String(L"Name: ") + contact->get_NameInfo()->get_DisplayName() + L" - " + messageInfo->get_EntryIdString()); | |
// Save to disk in vCard VCF format | |
contact->Save(dataDir + L"Contacts\\" + contact->get_NameInfo()->get_DisplayName() + L".vcf", Aspose::Email::Outlook::ContactSaveFormat::VCard); | |
} | |
} |
Trabajando con Listas de Distribución
Es posible crear una lista de distribución utilizando la API de Aspose.Email que es una colección de múltiples contactos. Una lista de distribución se puede guardar en disco en formato MSG de Outlook y se puede ver/manipular abriéndola en MS Outlook.
Crear y Guardar una Lista de Distribución
El siguiente fragmento de código te muestra cómo crear y guardar una lista de distribución.
For complete examples and data files, please go to https://github.com/kashifiqb/Aspose.Email-for-C | |
System::String dataDir = RunExamples::GetDataDir_Outlook(); | |
System::String displayName1 = L"Sebastian Wright"; | |
System::String email1 = L"SebastianWright@dayrep.com"; | |
System::String displayName2 = L"Wichert Kroos"; | |
System::String email2 = L"WichertKroos@teleworm.us"; | |
System::String strEntryId1; | |
System::String strEntryId2; | |
System::String path = dataDir + L"CreateDistributionListInPST_out.pst"; | |
if (System::IO::File::Exists(path)) | |
{ | |
System::IO::File::Delete(path); | |
} | |
// Create distribution list from contacts | |
{ | |
System::SharedPtr<PersonalStorage> personalStorage = PersonalStorage::Create(dataDir + L"CreateDistributionListInPST_out.pst", Aspose::Email::Outlook::Pst::FileFormatVersion::Unicode); | |
// Add the contact folder to pst | |
System::SharedPtr<FolderInfo> contactFolder = personalStorage->CreatePredefinedFolder(L"Contacts", Aspose::Email::Outlook::Pst::StandardIpmFolder::Contacts); | |
// Create contacts | |
strEntryId1 = contactFolder->AddMapiMessageItem(System::MakeObject<MapiContact>(displayName1, email1)); | |
strEntryId2 = contactFolder->AddMapiMessageItem(System::MakeObject<MapiContact>(displayName2, email2)); | |
// Create distribution list on the base of the created contacts | |
System::SharedPtr<MapiDistributionListMember> member1 = System::MakeObject<MapiDistributionListMember>(displayName1, email1); | |
member1->set_EntryIdType(Aspose::Email::Outlook::MapiDistributionListEntryIdType::Contact); | |
member1->set_EntryId(System::Convert::FromBase64String(strEntryId1)); | |
System::SharedPtr<MapiDistributionListMember> member2 = System::MakeObject<MapiDistributionListMember>(displayName2, email2); | |
member2->set_EntryIdType(Aspose::Email::Outlook::MapiDistributionListEntryIdType::Contact); | |
member2->set_EntryId(System::Convert::FromBase64String(strEntryId2)); | |
System::SharedPtr<MapiDistributionListMemberCollection> members = System::MakeObject<MapiDistributionListMemberCollection>(); | |
members->Add(member1); | |
members->Add(member2); | |
System::SharedPtr<MapiDistributionList> distributionList = System::MakeObject<MapiDistributionList>(L"Contact list", members); | |
distributionList->set_Body(L"Distribution List Body"); | |
distributionList->set_Subject(L"Sample Distribution List using Aspose.Email"); | |
// Add distribution list to PST | |
contactFolder->AddMapiMessageItem(distributionList); | |
} | |
System::String path1 = dataDir + L"CreateDistributionListInPST_OneOffmembers_out.pst"; | |
if (System::IO::File::Exists(path1)) | |
{ | |
System::IO::File::Delete(path1); | |
} | |
// Create one-off distribution list members (for which no separate contacts were created) | |
{ | |
System::SharedPtr<PersonalStorage> personalStorage = PersonalStorage::Create(dataDir + L"CreateDistributionListInPST_OneOffmembers_out.pst", Aspose::Email::Outlook::Pst::FileFormatVersion::Unicode); | |
// Add the contact folder to pst | |
System::SharedPtr<FolderInfo> contactFolder = personalStorage->CreatePredefinedFolder(L"Contacts", Aspose::Email::Outlook::Pst::StandardIpmFolder::Contacts); | |
System::SharedPtr<MapiDistributionListMemberCollection> oneOffmembers = System::MakeObject<MapiDistributionListMemberCollection>(); | |
oneOffmembers->Add(System::MakeObject<MapiDistributionListMember>(L"John R. Patrick", L"JohnRPatrick@armyspy.com")); | |
oneOffmembers->Add(System::MakeObject<MapiDistributionListMember>(L"Tilly Bates", L"TillyBates@armyspy.com")); | |
System::SharedPtr<MapiDistributionList> oneOffMembersList = System::MakeObject<MapiDistributionList>(L"Simple list", oneOffmembers); | |
contactFolder->AddMapiMessageItem(oneOffMembersList); | |
} |
Leer una Lista de Distribución desde un PST
El siguiente fragmento de código te muestra cómo leer una lista de distribución desde un PST.
For complete examples and data files, please go to https://github.com/kashifiqb/Aspose.Email-for-C | |
System::SharedPtr<MapiMessage> message = MapiMessage::FromFile(fileName); | |
System::SharedPtr<MapiDistributionList> dlist = System::DynamicCast<Aspose::Email::Outlook::MapiDistributionList>(message->ToMapiMessageItem()); |