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:

  1. Crea un objeto MapiContact.
  2. Establece las propiedades de MapiContact utilizando diferentes constructores y métodos.
  3. Crea un PST utilizando el método PersonalStorage.Create().
  4. 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:

  1. Carga el archivo PST en la clase PersonalStorage.
  2. Navega por la carpeta de Contactos.
  3. Obtén el contenido de la carpeta de Contactos para obtener la colección de mensajes.
  4. Recorre la colección de mensajes.
  5. 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.
  6. Llama al método PersonalStorage.ExtractMessage() para obtener la información de contacto en la clase MapiMessage.
  7. 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:

  1. Carga el archivo PST en la clase PersonalStorage.
  2. Navega por la carpeta de Contactos.
  3. Obtén el contenido de la carpeta de Contactos para obtener la colección de mensajes.
  4. Recorre la colección de mensajes.
  5. Llama al método PersonalStorage.ExtractMessage() para obtener la información de contacto en la clase MapiContact.
  6. 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.

todo:image_alt_text
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());