PST (Personal Storage Table) é um formato de arquivo de armazenamento usado por diferentes programas da Microsoft, como MS Outlook, Exchange e Windows Messaging. Os arquivos PST são capazes de armazenar mensagens, contatos, calendários, eventos, etc. Em certos casos, pode ser necessário analisar um arquivo PST e extrair dados dele programaticamente. Para conseguir isso, este artigo mostra como ler arquivos PST do MS Outlook usando C# .NET. Particularmente, você aprenderá como extrair informações de pastas, ler e-mails e buscar contatos de um arquivo PST.
- API .NET para ler arquivos PST do Outlook
- Ler um arquivo PST em C#
- Ler e-mails de um arquivo PST
- Extrair contatos de um arquivo PST
API .NET para ler arquivos PST do Outlook
Aspose.Email for .NET é uma poderosa API de processamento de e-mail que permite criar e enviar e-mails de dentro de aplicativos .NET. Além disso, ele suporta trabalhar com formatos populares de e-mail e arquivos de armazenamento. Usaremos esta API para ler as informações, mensagens e contatos das pastas de arquivos PST. Você pode baixar a API ou instalá-la via NuGet.
PM> Install-Package Aspose.Email -Version 22.3.0
Ler um arquivo PST do Outlook em C# .NET
A seguir estão as etapas para ler um arquivo PST e extrair suas informações em C#.
- Carregue o arquivo PST usando o método PersonalStorage.FromFile().
- Obtenha a coleção de pastas no PST usando o método PersonalStorage.RootFolder.GetSubFolders().
- Recupere as informações das pastas, como nome, número de itens, etc.
O exemplo de código a seguir mostra como analisar um arquivo PST e buscar as informações das pastas.
// Carregar arquivo PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");
// Obtenha as informações das pastas
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// Navegue por cada pasta para exibir suas informações
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("-----------------------------------");
}
Leia e-mails de um arquivo PST em C#
Os e-mails são as principais entidades armazenadas em arquivos PST pelo MS Outlook. Então, vamos ver como ler mensagens de email de um arquivo PST em C#.
- Carregue o arquivo PST usando o método PersonalStorage.FromFile().
- Acesse a pasta raiz usando a propriedade PersonalStorage.RootFolder.
- Obtenha a coleção de mensagens usando o método FolderInfo.GetContents().
- Percorra as mensagens na coleção e leia os campos de cada mensagem.
O exemplo de código a seguir mostra como extrair mensagens de um arquivo PST em C# .NET.
// Carregar o arquivo PST do Outlook
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");
// Obtenha o formato de exibição do arquivo PST
Console.WriteLine("Display Format: " + pst.Format);
// Obtenha as informações de pastas e mensagens
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;
// Chame o método recursivo para extrair arquivos msg de cada pasta
ExtractMsgFiles(folderInfo, pst);
///<summary>
/// Este é um método recursivo para exibir o conteúdo de uma pasta
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
// Exibir o nome da pasta
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("==================================");
// Percorra todas as mensagens nesta pasta
Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
{
Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
// Obter a mensagem na instância MapiMessage
MapiMessage message = pst.ExtractMessage(messageInfo);
// Salve esta mensagem em disco no formato msg
message.Save(message.Subject.Replace(":", " ") + ".msg");
// Salve esta mensagem para transmitir no formato msg
MemoryStream messageStream = new MemoryStream();
message.Save(messageStream);
}
// Chame este método recursivamente para cada subpasta
if (folderInfo.HasSubFolders == true)
{
foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
{
ExtractMsgFiles(subfolderInfo, pst);
}
}
}
Extrair contatos de um arquivo PST em C#
Em certos casos, pode ser necessário extrair as informações dos contatos armazenadas em um arquivo PST. As etapas a seguir demonstram como acessar os contatos em um arquivo PST em C#.
- Carregue o arquivo PST usando o método PersonalStorage.FromFile().
- Obtenha a referência da pasta de contatos usando o método PersonalStorage.RootFolder.GetSubFolder(“Contacts”).
- Obtenha uma coleção de contatos usando o método FolderInfo.GetContents().
- Percorra a coleção de contatos e leia cada contato ou salve-o.
O exemplo de código a seguir mostra como extrair contatos de um arquivo PST em C#.
// Carregar o arquivo PST do Outlook
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");
// Obtenha a pasta de contatos
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");
// Percorra todos os contatos nesta pasta
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (MessageInfo messageInfo in messageInfoCollection)
{
// Obtenha as informações de contato
MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
// Transmitir para MapiContact
MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();
// Exibir alguns conteúdos na tela
Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
// Salvar em disco no formato MSG
if (contact.NameInfo.DisplayName != null)
{
MapiMessage message = personalStorage.ExtractMessage(messageInfo);
// Livre-se de caracteres ilegais que não podem ser usados como nome de arquivo
string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
}
}
Obtenha uma licença de API gratuita
Você pode experimentar o Aspose.Email for .NET gratuitamente obtendo uma licença temporária.
Conclusão
Neste artigo, você aprendeu a ler arquivos PST programaticamente em C# .NET. Além disso, você viu como ler informações de pastas, buscar emails e extrair contatos de um arquivo PST em C#. Além disso, você pode explorar mais sobre o Aspose.Email para .NET usando documentação. Além disso, você pode compartilhar suas perguntas ou dúvidas em nosso fórum.