Ler arquivo OLM do Outlook para Mac e obter informações sobre pastas e subpastas
Abrir arquivos no formato OLM
Os arquivos no formato OLM podem ser abertos de duas maneiras:
- usando construtor
- usando o método estático FromFile
Existem diferenças no comportamento entre esses métodos. Veja a seção abaixo.
Abrir arquivos pelo construtor
Para abrir um arquivo, chame o construtor da classe OlmStorage e passe o nome completo do arquivo ou fluxo como argumento:
OlmStorage olm = new OlmStorage("fileName");
Abrir arquivos 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 como argumento:
OlmStorage olm = OlmStorage.fromFile("fileName");
Abrir arquivos usando o método estático FromStream
Para abrir um arquivo usando o método estático fromStream, passe um nome de fluxo como argumento:
Ler arquivo OLM
O seguinte trecho de código mostra como carregar o arquivo OLM e obter seu conteúdo.
Obter pastas
Para recuperar pastas de um arquivo OLM (Outlook para Mac), carregue-o primeiro com a classe OlmStorage e, em seguida, use um dos seguintes métodos, dependendo de suas necessidades:
- getFolder(String name, boolean ignoreCase) - Obtém a pasta pelo nome.
- getFolders() - Obtém a hierarquia de pastas/coleção de pastas.
- getFolderHierarchy() - Obtém a hierarquia de pastas.
O exemplo de código abaixo mostrará como obter uma pasta de um arquivo OLM:
// Obter a pasta pelo nome
OlmStorage olm = OlmStorage.fromFile("fileName");
try {
OlmFolder inbox = olm.getFolder("inbox", true);
} finally {
olm.dispose();
}
Ao usar o método fromFile para abrir um arquivo OLM, o getFolderHierarchy() retornará null. Nesse caso, chame o método getFolders() explicitamente para recuperar a lista de diretórios no arquivo OLM.
Obter caminho da pasta
Você também pode obter o caminho das pastas no arquivo OLM. Aspose.Email fornece a propriedade OlmFolder.Path que retorna o caminho da pasta. O seguinte trecho de código demonstra o uso da propriedade OlmFolder.Path para obter os caminhos das pastas no arquivo OLM.
Contar o número de itens na pasta
Você também pode contar o número de itens na pasta. Aspose.Email fornece a propriedade OlmFolder.MessageCount que retorna o número de itens na pasta. O seguinte trecho de código demonstra o uso da propriedade OlmFolder.MessageCount para obter o número de itens nas pastas do arquivo OLM.
Enumerar mensagens de uma determinada pasta
Aspose.Email fornece a API para trabalhar com armazenamentos OLM e extrair mensagens de uma pasta específica. As classes OlmFolder e OlmMessageInfo representam informações breves sobre uma pasta e uma mensagem no armazenamento, respectivamente. A classe OlmFolder fornece os seguintes métodos:
-
OlmFolder.getSubFolder(String subfolderName, boolean ignoreCase) - Obtém a subpasta pelo nome.
-
OlmFolder.enumerateMapiMessages() - Expõe o enumerador que suporta a iteração de MapiMessages na pasta atual.
-
OlmFolder.enumerateMessages() - Expõe o enumerador que suporta a iteração de OlmMessageInfo’s na pasta atual.
-
OlmFolder.enumerateMessages(int startIndex, int count) - Expõe o enumerador que suporta a iteração de OlmMessageInfo’s dentro de um intervalo dado.
-
OlmFolder.enumerateMessages(MailQuery query) - Expõe o enumerador que suporta a iteração de OlmMessageInfo’s por critérios de pesquisa.
Os exemplos de código abaixo demonstrarão o uso desses métodos:
// Enumera todas as mensagens em uma pasta determinada
OlmStorage olm = OlmStorage.fromFile("fileName");
try {
OlmFolder inbox = olm.getFolder("inbox", true);
for (OlmMessageInfo messageInfo : inbox.enumerateMessages()) {
System.out.println(messageInfo.getSubject());
}
} finally {
olm.dispose();
}
// Enumera um intervalo de mensagens em uma pasta determinada
OlmStorage olm = OlmStorage.fromFile("fileName");
try {
OlmFolder inbox = olm.getFolder("inbox", true);
int startIndex = 10;
int count = 100;
for (OlmMessageInfo messageInfo : inbox.enumerateMessages(startIndex, count)) {
System.out.println(messageInfo.getSubject());
}
} finally {
olm.dispose();
}
// Enumera mensagens por critérios de pesquisa
OlmStorage olm = OlmStorage.fromFile("fileName");
try {
OlmFolder inbox = olm.getFolder("inbox", true);
MailQueryBuilder mailQueryBuilder = new MailQueryBuilder();
mailQueryBuilder.getSubject().contains("invitation");
mailQueryBuilder.getFrom().contains("Mark");
for (OlmMessageInfo messageInfo : inbox.enumerateMessages(mailQueryBuilder.getQuery())) {
System.out.println(messageInfo.getSubject());
}
} finally {
olm.dispose();
}
// Enumera todas as mensagens e a extração de algumas delas
OlmStorage olm = OlmStorage.fromFile("fileName");
try {
OlmFolder inbox = olm.getFolder("inbox", true);
for (OlmMessageInfo messageInfo : inbox.enumerateMessages()) {
if (messageInfo.hasAttachments()) {
MapiMessage msg = olm.extractMapiMessage(messageInfo);
}
}
} finally {
olm.dispose();
}
Extrair mensagens de OLM por identificadores
Às vezes, é necessário extrair mensagens selecionadas por identificadores. Por exemplo, seu aplicativo armazena identificadores em um banco de dados e extrai uma mensagem sob demanda. Esta é a forma eficiente de evitar percorrer todo o armazenamento a cada vez para encontrar uma mensagem específica a ser extraída. Para implementar esse recurso para arquivos OLM, Aspose.Email fornece os seguintes métodos e classes:
- a propriedade EntryId da classe OlmMessageInfo - Obtém o identificador da entrada da mensagem.
- método sobrecarregado extractMapiMessage(String id) da classe OlmStorage - Obtém a mensagem do OLM.
O exemplo de código abaixo demonstra como extrair mensagens de OLM por identificadores:
for (OlmMessageInfo msgInfo : olmFolder.enumerateMessages()) {
MapiMessage msg = storage.extractMapiMessage(msgInfo.getEntryId());
}
Nota: O ID da mensagem é único dentro do arquivo de armazenamento. Os IDs são criados pelo Aspose.Email e não podem ser usados em outras libs ou aplicativos de processamento de OLM de terceiros.
Extrair itens OLM de arquivos corrompidos
Aspose.Email fornece uma API de percurso que permite extrair todos os itens OLM na medida do possível, sem lançar exceções, mesmo que alguns dados do arquivo original estejam corrompidos.
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.
OlmStorage olm = new OlmStorage(new TraversalExceptionsCallback() {
public void invoke(TraversalAsposeException exception, String itemId) {
/* Código de tratamento de exceção. */
}
});
As exceções de carga e percurso estarão disponíveis através do método de callback.
O método load retorna ‘true’ se o arquivo foi carregado com sucesso e é possível um percurso adicional. Se um arquivo estiver corrompido e nenhum percurso for possível, ‘false’ é retornado.
TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
public void invoke(TraversalAsposeException exception, String itemId) {
/* Código de tratamento de exceção. */
}
};
try (OlmStorage olm = new OlmStorage(exceptionsCallback)) {
if (olm.load(fileName)) {
List<OlmFolder> folderHierarchy = olm.getFolders();
extractItems(olm, folderHierarchy);
}
}
private static void extractItems(OlmStorage olm, List<OlmFolder> folders) {
for (OlmFolder folder : folders) {
if (folder.hasMessages()) {
System.out.println(folder);
for (MapiMessage msg : olm.enumerateMessages(folder)) {
System.out.println(msg.getSubject());
}
}
if (folder.getSubFolders().size() > 0) {
extractItems(olm, folder.getSubFolders());
}
}
}
Obter data de modificação da mensagem
A propriedade OlmMessageInfo.getModifiedDate permite que você obtenha a data de modificação da mensagem.
for (OlmMessageInfo messageInfo : inboxFolder.enumerateMessages()) {
Date modifiedDate = messageInfo.getModifiedDate();
}