Работа с контактами в PST файле
Добавление контакта в PST
С помощью Aspose.Email вы можете добавить MapiContact в подкаталог Contacts файла PST, который вы создали или загрузили. Ниже приведены шаги для добавления MapiContact в PST:
- Создайте объект MapiContact.
- Установите свойства MapiContact, используя различные конструкторы и методы.
- Создайте PST, используя метод PersonalStorage.Create().
- Создайте предопределенную папку (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 используются для получения и отображения информации о контакте. Шаги для получения информации о контакте следующие:
- Загрузите файл PST в классе PersonalStorage.
- Просмотрите папку Contacts.
- Получите содержимое папки Contacts, чтобы получить коллекцию сообщений.
- Пройдите через коллекцию сообщений.
- Вызовите метод PersonalStorage.ExtractContactInfo(), чтобы получить информацию о контакте в классе MapiContact. Используйте свойства класса MapiContact для доступа к информации о контакте.
- Вызовите метод PersonalStorage.ExtractMessage(), чтобы получить информацию о контакте в классе MapiMessage.
- Вызовите метод 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. Чтобы получить информацию о контакте:
- Загрузите файл PST в классе PersonalStorage.
- Просмотрите папку Contacts.
- Получите содержимое папки Contacts, чтобы получить коллекцию сообщений.
- Пройдите через коллекцию сообщений.
- Вызовите метод PersonalStorage.ExtractMessage(), чтобы получить информацию о контакте в классе MapiContact.
- Используйте различные свойства класса MapiContact для доступа к информации о контакте.
Программа ниже загружает файл PST с диска и сохраняет все контакты в формате vCard (VCF). Файлы VCF можно затем использовать в любой другой программе, которая может загрузить стандартный файл контактов vCard. Если вы откроете любой файл VCF в Microsoft Outlook, он будет выглядеть, как на скриншоте ниже.
![]() |
---|
Следующий фрагмент кода показывает, как экспортировать контакты из 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()); |