PST (Personal Storage Table) – це формат файлу для зберігання, який використовується різними програмами Microsoft, такими як MS Outlook, Exchange і Windows Messaging. У файлах PST можна зберігати повідомлення, контакти, календарі, події тощо. У деяких випадках вам може знадобитися проаналізувати файл PST і отримати з нього дані програмним шляхом. Щоб досягти цього, у цій статті показано, як читати файли MS Outlook PST за допомогою C# .NET. Зокрема, ви дізнаєтесь, як витягувати інформацію з папок, читати електронні листи та отримувати контакти з файлу PST.
- .NET API для читання файлів Outlook PST
- Читання файлу PST у C#
- Читайте електронні листи з файлу PST
- Витягніть контакти з файлу PST
.NET API для читання файлів Outlook PST
Aspose.Email for .NET — це потужний API обробки електронної пошти, який дозволяє створювати та надсилати електронні листи з програм .NET. Крім того, він підтримує роботу з популярними форматами файлів електронної пошти та зберігання. Ми використовуватимемо цей API для читання інформації про папки, повідомлень і контактів із файлів PST. Ви можете завантажити API або встановити його за допомогою NuGet.
PM> Install-Package Aspose.Email -Version 22.3.0
Прочитайте PST-файл Outlook у C# .NET
Нижче наведено кроки, щоб прочитати файл PST і витягти його інформацію в C#.
- Завантажте файл PST за допомогою методу PersonalStorage.FromFile().
- Отримайте колекцію папок у PST за допомогою методу PersonalStorage.RootFolder.GetSubFolders().
- Отримати інформацію про папки, таку як назва, кількість елементів тощо.
У наведеному нижче прикладі коду показано, як розібрати файл PST і отримати інформацію про папки.
// Завантажте файл PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");
// Отримайте інформацію про папки
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// Перегляньте кожну папку, щоб відобразити інформацію про неї
foreach (FolderInfo folderInfo in folderInfoCollection)
{
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("Total items: " + folderInfo.ContentCount);
Console.WriteLine("Total unread items: " + folderInfo.ContentUnreadCount);
Console.WriteLine("-----------------------------------");
}
Читайте електронні листи з файлу PST у C#
Електронні листи є основними об’єктами, які зберігаються у файлах PST у MS Outlook. Отже, давайте подивимося, як читати повідомлення електронної пошти з файлу PST у C#.
- Завантажте файл PST за допомогою методу PersonalStorage.FromFile().
- Отримайте доступ до кореневої папки за допомогою властивості PersonalStorage.RootFolder.
- Отримати колекцію повідомлень за допомогою методу FolderInfo.GetContents().
- Перегляньте повідомлення в колекції та прочитайте поля кожного повідомлення.
У наведеному нижче прикладі коду показано, як видобувати повідомлення з файлу PST у C# .NET.
// Завантажте файл Outlook PST
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");
// Отримайте формат відображення файлу PST
Console.WriteLine("Display Format: " + pst.Format);
// Отримайте інформацію про папки та повідомлення
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;
// Викличте рекурсивний метод, щоб видобути файли msg з кожної папки
ExtractMsgFiles(folderInfo, pst);
///<summary>
/// Це рекурсивний метод відображення вмісту теки
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
// Відображення назви папки
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("==================================");
// Перегляньте всі повідомлення в цій папці
Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
{
Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
// Отримати повідомлення в примірнику MapiMessage
MapiMessage message = pst.ExtractMessage(messageInfo);
// Збережіть це повідомлення на диск у форматі msg
message.Save(message.Subject.Replace(":", " ") + ".msg");
// Збережіть це повідомлення для потокової передачі у форматі повідомлення
MemoryStream messageStream = new MemoryStream();
message.Save(messageStream);
}
// Викликайте цей метод рекурсивно для кожної вкладеної папки
if (folderInfo.HasSubFolders == true)
{
foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
{
ExtractMsgFiles(subfolderInfo, pst);
}
}
}
Витягти контакти з файлу PST у C#
У деяких випадках вам може знадобитися видобути інформацію про контакти, що зберігається у файлі PST. Наступні кроки демонструють, як отримати доступ до контактів у файлі PST у C#.
- Завантажте файл PST за допомогою методу PersonalStorage.FromFile().
- Отримайте посилання на папку контактів за допомогою методу PersonalStorage.RootFolder.GetSubFolder(“Contacts”).
- Отримайте колекцію контактів за допомогою методу FolderInfo.GetContents().
- Перегляньте колекцію контактів і прочитайте кожен контакт або збережіть його.
У наведеному нижче прикладі коду показано, як отримати контакти з файлу PST у C#.
// Завантажте файл Outlook PST
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");
// Отримайте папку «Контакти».
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");
// Перегляньте всі контакти в цій папці
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (MessageInfo messageInfo in messageInfoCollection)
{
// Отримайте контактну інформацію
MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
// Трансляція на MapiContact
MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();
// Показати деякий вміст на екрані
Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
// Зберегти на диск у форматі MSG
if (contact.NameInfo.DisplayName != null)
{
MapiMessage message = personalStorage.ExtractMessage(messageInfo);
// Позбудьтеся неприпустимих символів, які не можна використовувати як назву файлу
string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
}
}
Отримайте безкоштовну ліцензію API
Ви можете безкоштовно спробувати Aspose.Email for .NET, отримавши тимчасову ліцензію.
Висновок
У цій статті ви дізналися, як програмно читати файли PST у C# .NET. Крім того, ви бачили, як читати інформацію про папку, отримувати електронні листи та видобувати контакти з файлу PST у C#. Крім того, ви можете дізнатися більше про Aspose.Email for .NET за допомогою документації. Також ви можете поділитися своїми запитаннями чи запитами на нашому форумі.