Ler arquivo OLM do Outlook para Mac e obter informações de pastas e subpastas
OLM (Arquivo de Arquivamento do Outlook para Mac) é um formato de arquivo associado ao Microsoft Outlook para Mac. É usado para arquivar e armazenar mensagens de e-mail, contatos, itens de calendário, tarefas e outros dados do Outlook em computadores Mac. Os arquivos OLM servem como um formato de backup ou arquivamento, permitindo que os usuários salvem seus dados do Outlook para Mac para referência futura ou migração. É importante notar que os arquivos OLM são específicos do Outlook para Mac e não são compatíveis com o formato de arquivo PST (Tabela de Armazenamento Pessoal) usado pelo Outlook no Windows. Se você precisar transferir dados do Outlook entre diferentes plataformas, ferramentas de conversão serão úteis. Aspose.Email oferece tais ferramentas, incluindo abertura, leitura e outras funcionalidades para trabalhar com arquivos OLM.
Abrindo arquivos no formato OLM
Os arquivos no formato OLM podem ser abertos de duas maneiras:
- usando o construtor
- usando o método ‘from_file’ estático
Abrindo arquivos pelo construtor
Para abrir um arquivo, chame o construtor da classe OlmStorage e passe o nome completo do arquivo ou fluxo como argumento:
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
Abrindo arquivos usando o método estático FromFile
Para abrir um arquivo, use o método estático ‘from_file’ da classe OlmStorage e passe o nome completo do arquivo ou fluxo como argumento:
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
Obtendo pastas
Você pode visualizar e exibir a hierarquia de pastas recuperada de um arquivo OLM usando a função ‘print_all_folders’. Ela aceita a propriedade ‘folder_hierarchy’ da classe OlmStorage e um nível de indentação como entrada, e então percorre recursivamente a hierarquia para imprimir o nome de cada pasta juntamente com a indentação apropriada. O exemplo de código abaixo demonstra como usar essa função para exibir a hierarquia de pastas de um arquivo OLM. Ele exibe a lista de todas as pastas em ordem hierárquica:
import aspose.email as ae
def print_all_folders(folder_hierarchy, indent):
for folder in folder_hierarchy:
print(f"{indent}{folder.name}")
print_all_folders(folder.sub_folders, indent + "-")
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
print_all_folders(olm.folder_hierarchy, "")
O exemplo de código acima visa exibir a hierarquia de pastas do arquivo OLM por meio de uma função recursiva de forma mais estruturada e legível. Aspose.Email também possibilita acessar diretamente a estrutura de pastas do arquivo OLM usando o método ‘get_folders()’ da classe OlmStorage.
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folders = olm.get_folders()
Além disso, é possível obter qualquer pasta pelo nome. O exemplo de código a seguir utiliza o método ‘get_folder(name, ignore_case)’ da classe OlmStorage, passando o nome da pasta e a sensibilidade a maiúsculas como parâmetros para recuperar a pasta pelo seu nome:
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
Lista de e-mails
Os trechos de código abaixo demonstram como usar a biblioteca Aspose.Email para ler e extrair os assuntos de e-mails de um arquivo do Outlook para Mac (OLM). A classe OlmFolder, que representa uma pasta, possui os seguintes métodos para obter a lista de e-mails:
- ‘enumerate_messages()’ - Itera por cada mensagem de e-mail na pasta. Este método retorna mensagens como instâncias da classe OlmMessageInfo, que fornece informações básicas sobre cada mensagem de e-mail, como assunto, remetente, data, etc.
- ‘enumerate_mapi_messages()’ - Também itera por cada mensagem de e-mail em uma pasta, mas, neste caso, retorna mensagens como instâncias da classe MapiMessage, que representa uma mensagem de e-mail de forma mais detalhada e específica do MAPI. Isso fornece acesso a uma ampla gama de propriedades e detalhes da mensagem de e-mail, permitindo um processamento mais avançado e especializado.
Usando o método EnumerateMessages
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
for message_info in folder.enumerate_messages():
print(message_info.subject)
Usando o método EnumerateMapiMessages
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
for msg in folder.enumerate_mapi_messages():
msg.save(f"{msg.subject}.msg")
Outras propriedades úteis
As outras propriedades úteis da classe OlmFolder são:
- ‘has_messages’ - Obtém um valor indicando se a pasta atual possui mensagens.
- ‘message_count’ - Obtém a contagem de mensagens.
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
if folder.has_messages:
print(f"Contagem de mensagens: {folder.message_count}")
Obter ou definir a data de modificação de uma mensagem
Você pode recuperar informações sobre o último tempo de modificação de uma mensagem de e-mail. A propriedade ‘modified_date’ da classe OlmMessageInfo representa a data e hora em que a mensagem foi modificada pela última vez.
Aqui está um exemplo que demonstra o uso da propriedade:
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
for message_info in folder.enumerate_messages():
modifiedDate = message_info.modified_date
Extraindo e-mails
Você pode recuperar os dados reais da mensagem MAPI de um armazenamento de e-mail. O método ‘extract_mapi_message(message_info)’ da classe OlmStorage é usado para extrair a mensagem MAPI do armazenamento com base nas informações fornecidas na message_info.
O trecho de código abaixo demonstra como usar esse método:
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
for message_info in folder.enumerate_messages():
msg = olm.extract_mapi_message(message_info)
Extraindo todos os itens de um e-mail usando a API de travessia
Você pode extrair todos os itens de um arquivo OLM do Outlook, na medida do possível, sem lançar exceções, mesmo que alguns dados do arquivo original estejam corrompidos. Para realizar isso, use o construtor OlmStorage(TraversalExceptionsCallback callback) e o método Load(string fileName) em vez do método FromFile. O construtor permite definir um método de callback.
using (var olm = new OlmStorage((exception, id) => { /* Código de tratamento de exceção. */ }))
O método de callback torna disponíveis as exceções de carregamento e travessia.
O método Load retorna ‘true’ se o arquivo foi carregado com sucesso e a travessia adicional é possível. Se um arquivo estiver corrompido e a travessia não for possível, ‘false’ é retornado.
if (olm.Load(fileName))
O seguinte trecho de código e as etapas mostram como usar essa API:
- Crie uma nova instância da classe OlmStorage, passando um callback de tratamento de exceções para lidar com quaisquer exceções encontradas durante o processo.
- Carregue o arquivo OLM chamando o método Load da instância de OlmStorage.
- Se o arquivo OLM for carregado com sucesso, obtenha a hierarquia de pastas chamando o método GetFolders na instância de OlmStorage. Isso retorna uma lista de objetos OlmFolder.
- Chame o método ExtractItems, passando a instância de OlmStorage e a lista de objetos OlmFolder.
- No método ExtractItems, itere através de cada pasta na lista de pastas.
- Se a pasta contiver mensagens (e-mails), imprima o nome da pasta no console usando Console.WriteLine(folder).
- Itere através das mensagens na pasta atual chamando o método EnumerateMessages na instância de 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 de OlmStorage e as subpastas da pasta atual.
using (var olm = new OlmStorage((exception, id) => { /* Código de tratamento de exceção. */ }))
{
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 do OLM por identificadores
Para acessar os dados da mensagem MAPI, você pode usar a propriedade ‘entry_id’ para obter o identificador único (Entry ID) de uma mensagem usando a classe OlmMessageInfo. Em seguida, você pode utilizar o método ‘extract_mapi_message(id)’ da classe OlmStorage, passando o entry ID como parâmetro para recuperar a mensagem MAPI associada a esse entry ID específico. O seguinte trecho de código demonstra o uso desses recursos:
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)
for message_info in folder.enumerate_messages():
msg = olm.extract_mapi_message(message_info.entry_id)
Obter caminho da pasta
Você também pode obter o caminho hierárquico ou a localização da pasta dentro do arquivo OLM do Outlook. Aspose.Email fornece a propriedade ‘path’ da classe OlmFolder que retorna o caminho da pasta. O seguinte trecho de código demonstra o uso dessa propriedade:
import aspose.email as ae
def print_path(storage, folders):
for folder in folders:
# imprime o caminho da pasta atual
print(folder.path)
if folder.sub_folders:
print_path(storage, folder.sub_folders)
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
print_path(olm, olm.folder_hierarchy)
Contar o número de itens na pasta
Aspose.Email oferece a capacidade de contar o número total de mensagens de e-mail contidas em uma pasta específica de um arquivo OLM do Outlook. A propriedade ‘message_count’ da classe OlmFolder retorna a contagem total de itens (mensagens de e-mail) armazenados em uma pasta específica no arquivo OLM. O seguinte trecho de código demonstra o uso dessa propriedade:
import aspose.email as ae
def print_message_count(folders):
for folder in folders:
print(f"Contagem de Mensagens [{folder.name}]: {folder.message_count}")
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
print_message_count(olm.folder_hierarchy)
Obter contagem total de itens do OlmStorage
O método ‘get_total_items_count()’ da classe OlmStorage retorna o número total de itens de mensagem contidos no armazenamento OLM.
import aspose.email as ae
fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
count = olm.get_total_items_count()
Recuperar cores de categorias do Outlook
Com o Aspose.Email, você pode facilmente recuperar e utilizar as cores de categoria associadas às categorias de itens do Outlook armazenadas em arquivos OLM. A classe OlmItemCategory permite acessar os nomes das categorias e suas respectivas cores representadas em formato hexadecimal. A classe OlmStorage possui o método ‘GetCategories()’ para recuperar uma lista de categorias do armazenamento OLM. Implementando o trecho de código abaixo, você pode recuperar facilmente todas as categorias utilizadas de um arquivo de armazenamento OML e acessar o nome da categoria juntamente com sua cor.
with OlmStorage.FromFile("storage.olm") as olm:
categories = olm.GetCategories()
for category in categories:
print(f"Nome da categoria: {category.Name}")
# A cor é representada como um valor hexadecimal: #rrggbb
print(f"Cor da categoria: {category.Color}")
Além disso, você pode recuperar a cor da categoria associada a mensagens específicas iterando pelas mensagens em uma pasta e acessando a cor da categoria correspondente com base no nome da categoria.
for msg in olm.EnumerateMessages(folder):
if msg.Categories is not None:
for msgCategory in msg.Categories:
print(f"Nome da categoria: {msgCategory}")
categoryColor = next((c.Color for c in categories if c.Name.lower() == msgCategory.lower()), None)
if categoryColor is not None:
print(f"Cor da categoria: {categoryColor}")