Чтение файла OLM Outlook for Mac и получение информации о папках и подпапках
Открытие файлов формата OLM
Файлы формата OLM можно открыть двумя способами:
- использование конструктора
- использование статического метода FromFile
Поведение этих методов различается. См. раздел ниже.
Открытие файлов через конструктор
Чтобы открыть файл, вызовите конструктор OlmStorage класс и передайте полное имя файла или поток в качестве аргумента:
OlmStorage olm = new OlmStorage("fileName");
Открытие файлов с помощью статического метода FromFile
Чтобы открыть файл, используйте статический метод fromFile и передайте полное имя файла в качестве аргумента:
OlmStorage olm = OlmStorage.fromFile("fileName");
Открытие файлов с помощью статического метода FromStream
Чтобы открыть файл с помощью статического метода fromStream, передайте в него имя потока в качестве аргумента:
Чтение файла OLM
Следующий фрагмент кода показывает, как загрузить файл OLM и получить его содержимое.
Получить папки
Чтобы получить папки из файла OLM (Outlook for Mac), загрузите его с помощью OlmStorage сначала класс, а затем используйте один из следующих методов в зависимости от ваших нужд:
- getFolder(String name, boolean ignoreCase) - Получает папку по имени.
- getFolders() - Получает иерархию/коллекцию папок.
- getFolderHierarchy() - Получает иерархию папок.
Пример кода ниже покажет, как получить папку из файла OLM:
// Get the folder by name
OlmStorage olm = OlmStorage.fromFile("fileName");
try {
OlmFolder inbox = olm.getFolder("inbox", true);
} finally {
olm.dispose();
}
При использовании fromFile метод, чтобы открыть файл OLM, getFolderHierarchy() вернёт null. В этом случае вызовите getFolders() метод явно для получения списка каталогов в файле OLM.
Получить путь к папке
Вы также можете получить путь к папкам в файле OML. Aspose.Email предоставляет OlmFolder.Path свойство, которое возвращает путь к папке. Следующий фрагмент кода демонстрирует использование OlmFolder.Path свойство для получения путей к папкам в файле OML.
Подсчитать количество элементов в папке
Вы также можете подсчитать количество элементов в папке. Aspose.Email предоставляет OlmFolder.MessageCount свойство, которое возвращает количество элементов в папке. Следующий фрагмент кода демонстрирует использование OlmFolder.MessageCount свойство для получения количества элементов в папках файла OML.
Работа с напоминаниями и датой выполнения для файлов Outlook MSG
Перечисление сообщений из заданной папки OlmFolder и OlmMessageInfo классы представляют краткую информацию о папке и сообщении в хранилище соответственно. Aspose.Email предоставляет API для работы с OLM‑хранилищами и извлечения сообщений из заданной папки. Aspose.Email предоставляет OlmFolder класс предоставляет следующие методы:
-
OlmFolder.getSubFolder(String subfolderName, boolean ignoreCase) — получает подпапку по имени.
-
OlmFolder.enumerateMapiMessages() — предоставляет перечислитель, поддерживающий итерацию MapiMessage в текущей папке.
-
OlmFolder.enumerateMessages() — предоставляет перечислитель, поддерживающий итерацию OlmMessageInfo в текущей папке.
-
OlmFolder.enumerateMessages(int startIndex, int count) — предоставляет перечислитель, поддерживающий итерацию OlmMessageInfo в заданном диапазоне.
-
OlmFolder.enumerateMessages(MailQuery query) — предоставляет перечислитель, поддерживающий итерацию OlmMessageInfo по критерию поиска.
Ниже приведённые примеры кода демонстрируют использование этих методов:
// Enumerates all messages in a given folder
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();
}
// Enumerates a range of messages in a given folder
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();
}
// Enumerates messages by search criteria
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();
}
// Enumerates all messages and the extraction of some of them
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();
}
Извлечение сообщений из OLM по идентификаторам
Иногда требуется извлечь выбранные сообщения по идентификаторам. Например, ваше приложение хранит идентификаторы в базе данных и извлекает сообщение по запросу. Это эффективный способ избежать полного обхода хранилища каждый раз для поиска конкретного сообщения. Для реализации этой возможности в файлах OLM Aspose.Email предоставляет следующие методы и классы:
- EntryId свойство OlmMessageInfo класс – получает идентификатор записи сообщения.
- перегруженный extractMapiMessage(String id) метод OlmStorage класс – получает сообщение из OLM.
Пример кода ниже демонстрирует, как извлекать сообщения из OLM по идентификаторам:
for (OlmMessageInfo msgInfo : olmFolder.enumerateMessages()) {
MapiMessage msg = storage.extractMapiMessage(msgInfo.getEntryId());
}
Примечание: Идентификатор сообщения уникален в пределах файла хранилища. Идентификаторы создаются Aspose.Email и не могут использоваться в сторонних библиотеках или приложениях для обработки OLM.
Извлечение элементов OLM из повреждённых файлов
Aspose.Email предоставляет API обхода, который позволяет извлекать все элементы OLM насколько это возможно, не бросая исключения, даже если некоторые данные оригинального файла повреждены.
Используйте OlmStorage(TraversalExceptionsCallback callback) конструктор и load(String fileName) метод вместо fromFile метод.
Конструктор позволяет определить метод обратного вызова.
OlmStorage olm = new OlmStorage(new TraversalExceptionsCallback() {
public void invoke(TraversalAsposeException exception, String itemId) {
/* Exception handling code. */
}
});
Исключения при загрузке и обходе будут доступны через метод обратного вызова.
Метод load возвращает ’true’, если файл успешно загружен и дальнейший обход возможен. Если файл повреждён и обход невозможен, возвращается ‘false’.
TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
public void invoke(TraversalAsposeException exception, String itemId) {
/* Exception handling code. */
}
};
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());
}
}
}
Получить дату изменения сообщения
Этот OlmMessageInfo.getModifiedDate свойство позволяет получить дату изменения сообщения.
for (OlmMessageInfo messageInfo : inboxFolder.enumerateMessages()) {
Date modifiedDate = messageInfo.getModifiedDate();
}