Lendo e Convertendo Arquivos Outlook
Trabalhando com Arquivos OST
Aspose.Email para .NET fornece uma API para ler arquivos OST do Microsoft Outlook. Você pode carregar um arquivo OST de um disco ou de um stream em uma instância da Aspose.Email.Outlook.Pst.PersonalStorage classe para acessar seu conteúdo, como pastas, subpastas e mensagens. O Microsoft Outlook cria um arquivo PST para armazenar e‑mails ao usar servidores de correio POP3 ou IMAP. Em contraste, ele cria um arquivo OST quando o Microsoft Exchange é o servidor de correio. Os arquivos OST também suportam tamanhos de arquivo maiores que os arquivos PST.
Ler Arquivos OST
O processo para ler um arquivo OST com Aspose.Email é exatamente o mesmo que para ler um arquivo PST. O mesmo código pode ler arquivos PST e OST: basta fornecer o nome correto do arquivo para o PersonalStorage.FromFile() método. O trecho de código a seguir mostra como ler arquivos OST.
Converter OST para PST
Experimente!
Converta e‑mails & arquivos de mensagens online com o gratuito Aspose.Email Conversion App.
Para executar outras operações com arquivos OST, consulte as páginas a seguir:
- Ler Arquivos PST e Recuperar Informações
- Obter informações das mensagens de um arquivo PST do Outlook
- Extrair mensagens de um arquivo PST do Outlook e salvar no disco ou em fluxo no formato MSG
- Acessar informações de contato de um arquivo PST do Outlook e salvar no disco em formato MSG
Converter PST para OST
A conversão de PST para OST não é suportada pelo Aspose.Email porque o OST é sempre criado pelo Outlook ao adicionar uma conta e sincronizar com o servidor de correio. A diferença entre arquivos PST e OST é que o PST está disponível apenas localmente. O conteúdo do OST também está disponível no servidor de e‑mail. Portanto, não há necessidade de converter PST para OST para uso local. Mas você pode importar um PST para uma conta existente usando o assistente Importar/Exportar no Outlook.
OLM é um formato de arquivo específico usado pelo Microsoft Outlook para armazenar dados locais como e‑mails, anexos, notas, dados de calendário, contatos, tarefas, histórico e mais. Arquivos OLM são compatíveis apenas com o Outlook para Mac e não podem ser abertos ou acessados pelo Outlook para Windows, que usa o formato de arquivo PST.
Trabalhando com Arquivos OLM
Abrir Arquivos OLM
Arquivos no formato OLM podem ser abertos de duas maneiras:
- usando o construtor
- usando o método estático FromFile
Existem diferenças de comportamento entre esses métodos. Veja a seção abaixo.
Usando o Construtor
Para abrir um arquivo, chame o construtor da OlmStorage classe e passe o nome completo do arquivo ou stream como argumento para ele:
var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);
Usando o Método Estático FromFile
Para abrir um arquivo, use o método estático FromFile e passe o nome completo do arquivo ou um stream como argumento para ele:
var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);
Recuperar Pastas
Para acessar a estrutura de diretórios de um arquivo OLM, crie uma instância da OlmStorage classe usando seu construtor e passando o caminho para o arquivo. Uma vez aberto, acesse sua estrutura de diretórios usando o FolderHierarchy propriedade. Esta propriedade retorna uma lista de OlmFolder objetos, cada um representando um diretório no arquivo OLM. Para explorar mais a estrutura de diretórios, acesse o SubFolders propriedade de cada objeto, que retorna uma lista de seus subdiretórios. Usando essas propriedades, você pode navegar por toda a hierarquia de diretórios do arquivo OLM e acessar todos os diretórios e subdiretórios que ele contém.
O exemplo abaixo exibe a lista de todas as pastas em ordem hierárquica:
using (var olm = new OlmStorage(fileName))
{
PrintAllFolders(olm.FolderHierarchy, string.Empty);
}
private void PrintAllFolders(List<OlmFolder> folderHierarchy, string indent)
{
foreach (var folder in folderHierarchy)
{
Console.WriteLine($"{indent}{folder.Name}");
PrintAllFolders(folder.SubFolders, indent+"-");
}
}
Ao usar o FromFile método para abrir um arquivo OLM, o FolderHierarchy a propriedade não será inicializada por padrão e retornará null. Neste caso, chame o método GetFolders explicitamente para inicializá‑la FolderHierarchy propriedade e recuperar a lista de diretórios no arquivo OLM:
using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}
Além disso, é possível obter qualquer pasta pelo nome:
- Chame GetFolder método.
- Passe o nome da pasta como primeiro argumento e o valor, que indica se deve ignorar diferenciação entre maiúsculas e minúsculas ao buscar uma pasta, como segundo parâmetro.
using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}
Listar E‑mails
OlmFolder a classe, que representa uma pasta, tem os seguintes métodos para obter a lista de e‑mails:
- EnumerateMessages implementa a iteração de e‑mails em uma pasta. Neste caso, cada iteração retorna OlmMessageInfo objeto, que fornece informações resumidas sobre o e‑mail.
- EnumerateMapiMessages, também implementa a iteração de e‑mails em uma pasta, mas neste caso, cada iteração retorna MapiMessage objeto, que representa o próprio e‑mail, com todas as propriedades.
Usando o Método EnumerateMessages
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}
Usando o Método EnumerateMapiMessages
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var msg in folder.EnumerateMapiMessages())
{
// save message in MSG format
msg.Save($"{msg.Subject}.msg");
}
}
Outras propriedades úteis
As outras propriedades úteis da classe OlmFolder são: HasMessages e MessageCount propriedades, que retornam a presença de mensagens na pasta e sua contagem.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}
Obter ou definir a data de modificação de uma mensagem
A data de modificação representa a data e hora em que a mensagem OLM foi modificada pela última vez. Você pode usar o OlmMessageInfo.ModifiedDate propriedade para recuperar ou atualizar o valor da data de modificação de uma mensagem OLM.
Aqui está um exemplo que demonstra o uso da propriedade:
foreach (OlmMessageInfo messageInfo in inboxFolder.EnumerateMessages())
{
DateTime modifiedDate = messageInfo.ModifiedDate;
}
Extrair E‑mails e Itens
OlmStorage classe tem ExtractMapiMessage método que permite extrair e‑mails. Este método recebe um OlmMessageInfo objeto.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
if (messageInfo.Date == DateTime.Today)
{
// Extracts today's messages form Inbox
var msg = olm.ExtractMapiMessage(messageInfo);
}
}
}
Usando a API de Traversal
Você pode extrair todos os itens de um arquivo Outlook OLM tanto quanto possível, sem gerar exceções, mesmo se alguns dados do arquivo original estiverem corrompidos. Para fazer isso, use OlmStorage(TraversalExceptionsCallback callback) construtor e Load(string fileName) método em vez do método FromFile. O construtor permite definir um método de callback.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
O método de callback disponibiliza exceções de carregamento e travessia.
O Load o método retorna ’true’ se o arquivo foi carregado com sucesso e a navegação adicional for possível. Se um arquivo estiver corrompido e a navegação não for possível, retorna ‘false’.
if (olm.Load(fileName))
O trecho de código a seguir e os passos mostram como usar esta API:
- Crie uma nova instância da OlmStorage classe, passando um callback de tratamento de exceções para lidar com quaisquer exceções encontradas durante o processo.
- Carregue o arquivo OLM chamando o Load método da instância OlmStorage.
- Se o arquivo OLM for carregado com sucesso, obtenha a hierarquia de pastas chamando o GetFolders método na instância OlmStorage. Isso retorna uma lista de objetos OlmFolder.
- Chame o método ExtractItems, passando a instância OlmStorage e a lista de objetos OlmFolder.
- No método ExtractItems, percorra cada pasta na lista de pastas.
- Se a pasta contiver mensagens (e‑mails), imprima o nome da pasta no console usando Console.WriteLine(folder).
- Percorra as mensagens na pasta atual chamando o método EnumerateMessages na instância OlmStorage, passando a pasta atual como argumento.
- Imprima o assunto de cada mensagem no console usando Console.WriteLine(msg.Subject).
- Se a pasta tiver subpastas, chame recursivamente o método ExtractItems novamente, passando a instância OlmStorage e as subpastas da pasta atual.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
{
if (olm.Load(fileName))
{
var folderHierarchy = olm.GetFolders();
ExtractItems(olm, folderHierarchy);
}
}
private static void ExtractItems(OlmStorage olm, List<OlmFolder> folders)
{
foreach (var folder in folders)
{
if (folder.HasMessages)
{
Console.WriteLine(folder);
foreach (var msg in olm.EnumerateMessages(folder))
{
Console.WriteLine(msg.Subject);
}
}
if (folder.SubFolders.Count > 0)
{
ExtractItems(olm, folder.SubFolders);
}
}
}
Extrair Mensagens por Identificadores
Às vezes é necessário extrair mensagens selecionadas por identificadores. Por exemplo, sua aplicação armazena identificadores em um banco de dados e extrai uma mensagem sob demanda. Esta é a maneira eficiente de evitar percorrer todo o armazenamento a cada vez para encontrar uma mensagem específica para extrair. Esse recurso está disponível para armazenamentos OLM. O EntryId propriedade do OlmMessageInfo classe obtém o identificador de entrada da mensagem. O ExtractMapiMessage(string id) método do OlmStorage classe obtém a mensagem do OLM.
O código abaixo mostra como extrair mensagens do OLM por identificadores.
O código executa os seguintes passos:
- Inicia um loop foreach para iterar por uma lista de OlmMessageInfo objetos. O loop usa o EnumerateMessages método do objeto olmFolder para recuperar uma lista de todas as mensagens na pasta atual sendo iterada.
- O loop extrai o objeto MapiMessage correspondente do armazenamento chamando o ExtractMapiMessage(string id) método de OlmStorage classe, passando o EntryId da mensagem atual como parâmetro.
O objeto MapiMessage recuperado pode ser usado para acessar e manipular o conteúdo da mensagem. O loop continua até que todas as mensagens da pasta tenham sido processadas.
foreach (OlmMessageInfo msgInfo in olmFolder.EnumerateMessages())
{
MapiMessage msg = storage.ExtractMapiMessage(msgInfo.EntryId);
}
Recuperação de Caminho da Pasta
Você também pode obter o caminho da pasta das pastas no arquivo OML. O Aspose.Email fornece OlmFolder.Path Propriedade que retorna o caminho da pasta. O trecho de código a seguir demonstra o uso de OlmFolder.Path Propriedade para obter os caminhos das pastas no arquivo OML.
var storage = new OlmStorage("SampleOLM.olm");
PrintPath(storage, storage.FolderHierarchy);
public static void PrintPath(OlmStorage storage, List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
// print the current folder path
Console.WriteLine(folder.Path);
if (folder.SubFolders.Count > 0)
{
PrintPath(storage, folder.SubFolders);
}
}
}
Contar Itens na Pasta
Você também pode contar o número de itens na pasta. O Aspose.Email fornece OlmFolder.MessageCount Propriedade que retorna o número de itens na pasta. O trecho de código a seguir demonstra o uso de OlmFolder.MessageCount Propriedade para obter o número de itens nas pastas do arquivo OML.
var storage = new OlmStorage("SampleOLM.olm");
PrintMessageCount(storage.FolderHierarchy);
public static void PrintMessageCount(List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
Console.WriteLine("Message Count [" + folder.Name + "]: " + folder.MessageCount);
}
}
Obter Contagem Total de Itens do OlmStorage
OlmStorage classe também tem GetTotalItemsCount() método que retorna o número total de itens de mensagem contidos no armazenamento OLM.
using (var olm = new OlmStorage("storage.olm"))
{
var count = olm.GetTotalItemsCount();
}
Recuperação de Cores de Categorias do Outlook
Para trabalhar com cores de categorias ou categorias de itens do Outlook armazenadas em arquivos OLM, o Aspose.Email oferece as seguintes soluções:
- OlmItemCategory classe - representa categorias de itens do Outlook disponíveis por seu nome e cores associadas, representadas em formato hexadecimal.
- GetCategories() método do OlmStorage classe - recupera a lista de categorias.
O exemplo de código a seguir demonstra como obter todas as categorias usadas do armazenamento OML:
using (var olm = OlmStorage.FromFile("storage.olm"))
{
var categories = olm.GetCategories();
foreach (var category in categories)
{
Console.WriteLine($"Category name: {category.Name}");
//Color is represented as a hexadecimal value: #rrggbb
Console.WriteLine($"Category color: {category.Color}");
}
}
O exemplo de código abaixo mostra como obter a cor de categoria de uma mensagem:
foreach (var msg in olm.EnumerateMessages(folder))
{
if (msg.Categories != null)
{
foreach (var msgCategory in msg.Categories)
{
Console.WriteLine($"Category name: {msgCategory}");
var categoryColor = cat.First(c => c.Name.Equals(msgCategory, StringComparison.OrdinalIgnoreCase)).Color;
Console.WriteLine($"Category color: {categoryColor}");
}
}
}
Converter OLM para PST
OLM é um formato de arquivo de banco de dados usado pelo Microsoft Outlook para sistemas Mac. Arquivos OLM armazenam mensagens de e‑mail, dados de calendário, dados de contato e configurações de aplicativo. Um arquivo OLM não é suportado pelo Outlook para Windows. Portanto, não é possível abrir um arquivo Outlook para Mac (OLM) no Outlook para Windows. Se você deseja migrar sua caixa de correio do Outlook para Mac para o Outlook para Windows, é necessário converter o arquivo OLM do Outlook para Mac para o formato de arquivo PST do Outlook.
Passos do Código
Para converter um arquivo OLM para PST, siga os passos abaixo:
- Crie uma instância de OlmStorage classe para abrir OLM fonte.
- Abra um arquivo OLM fonte.
- Crie um novo arquivo PST usando Criar método.
- Crie um método GetContainerClass para mapear a classe da mensagem para a classe da pasta.
- Crie um método AddToPst que leia recursivamente cada pasta e suas mensagens do OLM usando o método EnumerateMapiMessages e as adicione ao PST na mesma ordem usando os métodos AddSubFolder e AddMessage.
Exemplo de código
O exemplo de código a seguir mostra como converter OLM para PST.
Método Main:
// create an instance of OlmStorage class to open source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
// recursively reads each folder and its messages
// and adds them to the PST in the same order
foreach (var olmFolder in olm.FolderHierarchy)
{
AddToPst(pst.RootFolder, olmFolder);
}
}
Implementação do método GetContainerClass:
public string GetContainerClass(string messageClass)
{
if (messageClass.StartsWith("IPM.Contact") || messageClass.StartsWith("IPM.DistList"))
{
return "IPF.Contact";
}
if (messageClass.StartsWith("IPM.StickyNote"))
{
return "IPF.StickyNote";
}
if (messageClass.StartsWith("IPM.Activity"))
{
return "IPF.Journal";
}
if (messageClass.StartsWith("IPM.Task"))
{
return "IPF.Task";
}
if (messageClass.StartsWith("IPM.Appointment") || messageClass.StartsWith("IPM.Schedule.meeting"))
{
return "IPF.Appointment";
}
return "IPF.Note";
}
Implementação do método AddToPst:
public void AddToPst(FolderInfo pstFolder, OlmFolder olmFolder)
{
FolderInfo pstSubFolder = pstFolder.GetSubFolder(olmFolder.Name);
foreach (var msg in olmFolder.EnumerateMapiMessages())
{
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name, GetContainerClass(msg.MessageClass));
}
pstSubFolder.AddMessage(msg);
}
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name);
}
foreach (var olmSubFolder in olmFolder.SubFolders)
{
AddToPst(pstSubFolder, olmSubFolder);
}
}