Работа с контактами в PST файле

Добавление контакта в PST

С помощью Aspose.Email вы можете добавить MapiContact в подкаталог Contacts файла PST, который вы создали или загрузили. Ниже приведены шаги для добавления MapiContact в PST:

  1. Создайте объект MapiContact.
  2. Установите свойства MapiContact, используя различные конструкторы и методы.
  3. Создайте PST, используя метод PersonalStorage.Create().
  4. Создайте предопределенную папку (Contacts) в корне файла PST, получив доступ к корневой папке и затем вызвав метод AddMapiMessageItem().

Следующий фрагмент кода показывает, как создать MapiContact и затем добавить его в папку контактов только что созданного файла PST.

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);
}

Сохранение информации о контактах из файла PST в формате MSG

В этой статье объясняется, как получить доступ к информации о контактах из файла PST Outlook и сохранить контакт на диск в формате MSG. Классы PersonalStorage и MapiContact используются для получения и отображения информации о контакте. Шаги для получения информации о контакте следующие:

  1. Загрузите файл PST в классе PersonalStorage.
  2. Просмотрите папку Contacts.
  3. Получите содержимое папки Contacts, чтобы получить коллекцию сообщений.
  4. Пройдите через коллекцию сообщений.
  5. Вызовите метод PersonalStorage.ExtractContactInfo(), чтобы получить информацию о контакте в классе MapiContact. Используйте свойства класса MapiContact для доступа к информации о контакте.
  6. Вызовите метод PersonalStorage.ExtractMessage(), чтобы получить информацию о контакте в классе MapiMessage.
  7. Вызовите метод MapiMessage.Save(), чтобы сохранить контакт на диск в формате MSG.

Следующий фрагмент кода показывает, как извлечь всю информацию о контакте из файла PST и сохранить на диск в формате 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");
}
}
}

Сохранение информации о контактах из файла PST в формате VCF

В этой статье показано, как получить доступ к информации о контактах из файла PST Microsoft Outlook и сохранить контакт на диск в формате vCard (VCF). Используйте классы PersonalStorage и MapiContact для получения информации о контактах из файла PST. Чтобы получить информацию о контакте:

  1. Загрузите файл PST в классе PersonalStorage.
  2. Просмотрите папку Contacts.
  3. Получите содержимое папки Contacts, чтобы получить коллекцию сообщений.
  4. Пройдите через коллекцию сообщений.
  5. Вызовите метод PersonalStorage.ExtractMessage(), чтобы получить информацию о контакте в классе MapiContact.
  6. Используйте различные свойства класса MapiContact для доступа к информации о контакте.

Программа ниже загружает файл PST с диска и сохраняет все контакты в формате vCard (VCF). Файлы VCF можно затем использовать в любой другой программе, которая может загрузить стандартный файл контактов vCard. Если вы откроете любой файл VCF в Microsoft Outlook, он будет выглядеть, как на скриншоте ниже.

todo:image_alt_text
Следующий фрагмент кода показывает, как экспортировать контакты из Outlook PST в формат 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);
}
}

Работа с распределительными списками

Можно создать распределительный список, используя API Aspose.Email, который представляет собой коллекцию нескольких контактов. Распределительный список может быть сохранен на диск в формате Outlook MSG и может быть просмотрен/изменен, открыв его в MS Outlook.

Создание и сохранение распределительного списка

Следующий фрагмент кода показывает, как создать и сохранить распределительный список.

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);
}

Чтение распределительного списка из PST

Следующий фрагмент кода показывает, как прочитать распределительный список из 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());