PST (Personal Storage Table) to format pliku pamięci używany przez różne programy firmy Microsoft, takie jak MS Outlook, Exchange i Windows Messaging. Pliki PST mogą przechowywać wiadomości, kontakty, kalendarze, wydarzenia itp. W niektórych przypadkach może być konieczne przeanalizowanie pliku PST i programowe wyodrębnienie z niego danych. Aby to osiągnąć, w tym artykule pokazano, jak czytać pliki PST programu MS Outlook przy użyciu języka C# .NET. W szczególności dowiesz się, jak wyodrębniać informacje z folderów, czytać e-maile i pobierać kontakty z pliku PST.
- .NET API do odczytu plików PST programu Outlook
- Przeczytaj plik PST w C#
- Czytaj e-maile z pliku PST
- Wyodrębnij kontakty z pliku PST
.NET API do odczytu plików PST programu Outlook
Aspose.Email for .NET to potężny interfejs API do przetwarzania wiadomości e-mail, który umożliwia tworzenie i wysyłanie wiadomości e-mail z poziomu aplikacji .NET. Ponadto obsługuje pracę z popularnymi formatami plików e-mail i przechowywania. Będziemy używać tego interfejsu API do odczytywania informacji o folderach, wiadomości i kontaktów z plików PST. Możesz pobrać interfejs API lub zainstalować go za pomocą NuGet.
PM> Install-Package Aspose.Email -Version 22.3.0
Odczytywanie pliku PST programu Outlook w języku C# .NET
Poniżej przedstawiono kroki, aby odczytać plik PST i wyodrębnić jego informacje w języku C#.
- Załaduj plik PST za pomocą metody PersonalStorage.FromFile().
- Pobierz kolekcję folderów w pliku PST za pomocą metody PersonalStorage.RootFolder.GetSubFolders().
- Pobierz informacje o folderach, takie jak nazwa, liczba elementów itp.
Poniższy przykładowy kod pokazuje, jak analizować plik PST i pobierać informacje o folderach.
// Załaduj plik PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");
// Pobierz informacje o folderach
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// Przeglądaj każdy folder, aby wyświetlić jego informacje
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("-----------------------------------");
}
Czytaj e-maile z pliku PST w C#
Wiadomości e-mail to główne podmioty przechowywane w plikach PST przez MS Outlook. Zobaczmy więc, jak czytać wiadomości e-mail z pliku PST w języku C#.
- Załaduj plik PST za pomocą metody PersonalStorage.FromFile().
- Uzyskaj dostęp do folderu głównego za pomocą właściwości PersonalStorage.RootFolder.
- Pobierz kolekcję wiadomości za pomocą metody FolderInfo.GetContents().
- Przejrzyj wiadomości w kolekcji i przeczytaj pola każdej wiadomości.
Poniższy przykładowy kod pokazuje, jak wyodrębnić komunikaty z pliku PST w języku C# .NET.
// Załaduj plik PST programu Outlook
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");
// Uzyskaj format wyświetlania pliku PST
Console.WriteLine("Display Format: " + pst.Format);
// Pobierz informacje o folderach i wiadomościach
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;
// Wywołaj metodę rekurencyjną, aby wyodrębnić pliki msg z każdego folderu
ExtractMsgFiles(folderInfo, pst);
///<summary>
/// Jest to rekurencyjna metoda wyświetlania zawartości folderu
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
// Wyświetl nazwę folderu
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("==================================");
// Przejrzyj w pętli wszystkie wiadomości w tym folderze
Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
{
Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
// Pobierz wiadomość w instancji MapiMessage
MapiMessage message = pst.ExtractMessage(messageInfo);
// Zapisz tę wiadomość na dysku w formacie msg
message.Save(message.Subject.Replace(":", " ") + ".msg");
// Zapisz tę wiadomość do strumienia w formacie msg
MemoryStream messageStream = new MemoryStream();
message.Save(messageStream);
}
// Wywołaj tę metodę rekurencyjnie dla każdego podfolderu
if (folderInfo.HasSubFolders == true)
{
foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
{
ExtractMsgFiles(subfolderInfo, pst);
}
}
}
Wyodrębnij kontakty z pliku PST w C#
W niektórych przypadkach może być konieczne wyodrębnienie informacji o kontaktach przechowywanych w pliku PST. Poniższe kroki pokazują, jak uzyskać dostęp do kontaktów w pliku PST w języku C#.
- Załaduj plik PST za pomocą metody PersonalStorage.FromFile().
- Uzyskaj odniesienie do folderu kontaktów za pomocą metody PersonalStorage.RootFolder.GetSubFolder(“Contacts”).
- Pobierz kolekcję kontaktów za pomocą metody FolderInfo.GetContents().
- Przejrzyj kolekcję kontaktów i przeczytaj każdy kontakt lub zapisz go.
Poniższy przykładowy kod pokazuje, jak wyodrębnić kontakty z pliku PST w języku C#.
// Załaduj plik PST programu Outlook
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");
// Pobierz folder Kontakty
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");
// Przejrzyj wszystkie kontakty w tym folderze
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (MessageInfo messageInfo in messageInfoCollection)
{
// Uzyskaj informacje kontaktowe
MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
// Przesyłaj do MapiContact
MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();
// Wyświetl niektóre treści na ekranie
Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
// Zapisz na dysku w formacie MSG
if (contact.NameInfo.DisplayName != null)
{
MapiMessage message = personalStorage.ExtractMessage(messageInfo);
// Pozbądź się niedozwolonych znaków, których nie można użyć jako nazwy pliku
string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
}
}
Uzyskaj bezpłatną licencję API
Możesz wypróbować Aspose.Email for .NET za darmo, uzyskując tymczasową licencję.
Wniosek
W tym artykule nauczyłeś się, jak programowo odczytywać pliki PST w języku C# .NET. Ponadto widziałeś, jak czytać informacje o folderach, pobierać wiadomości e-mail i wyodrębniać kontakty z pliku PST w języku C#. Poza tym możesz dowiedzieć się więcej o Aspose.Email for .NET za pomocą dokumentacji. Możesz także dzielić się swoimi pytaniami lub zapytaniami na naszym forum.