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 для .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");
// Сохранить это сообщение в поток в формате 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 для .NET, получив временную лицензию.
Вывод
В этой статье вы узнали, как программно читать файлы PST в C# .NET. Кроме того, вы увидели, как читать информацию о папках, получать электронные письма и извлекать контакты из файла PST на C#. Кроме того, вы можете узнать больше об Aspose.Email для .NET, используя документацию. Кроме того, вы можете поделиться своими вопросами или запросами на нашем форуме.