Перенесення даних електронної пошти з Outlook for Mac (OLM) у широко підтримувані формати, такі як MBOX (для Thunderbird / Unix поштових скриньок) та PST (Outlook для Windows), є поширеним завданням при переході між платформами. Microsoft Outlook for Mac використовує формат OLM (Outlook for Mac Data File) для зберігання листів, контактів, календарів та інших елементів. Однак перенесення цих даних у середовища на базі Windows або інші поштові клієнти часто вимагає конвертації файлів OLM у універсально підтримувані формати, такі як MBOX (використовується клієнтами, такими як Thunderbird та Apple Mail) або PST (Outlook Personal Storage Table для Windows).
У цій статті ми покажемо, як конвертувати файли OLM у формати PST та MBOX на C# за допомогою Aspose.Email for .NET, потужного API, який спрощує складні завдання міграції електронної пошти програмно. Ви дізнаєтеся, як відкривати файли OLM, витягувати повідомлення, зберігати ієрархії папок та створювати портативні архіви електронної пошти для різних платформ.
Використання Aspose.Email for .NET для конвертації
[Aspose.Email for .NET][] надає всебічні можливості для роботи з різними форматами електронної пошти, включаючи OLM, MBOX та PST. Він спрощує складні завдання конвертації завдяки інтуїтивному API та обширній документації. Нижче ми пройдемо кроки з конвертації OLM у MBOX та PST за допомогою C#.
Щоб розпочати, встановіть пакет NuGet Aspose.Email у вашому проєкті .NET:
Install-Package Aspose.Email
Цей пакет включає всі необхідні класи для обробки файлів OLM, MBOX та PST.
Конвертувати OLM у MBOX
MBOX формат зберігає електронні листи як об’єднані MIME‑записи, зазвичай використовується відкритими поштовими клієнтами. Нижче наведено простий, але ефективний приклад коду, який конвертує всі повідомлення з папки OLM у файл MBOX. Він використовує такі члени API:
- OlmStorage.FromFile(…) - Відкриває архів OLM і надає доступ до його структури папок та елементів. Ви можете використовувати його для перерахування папок або вилучення повідомлень з файлу OLM.
- GetFolder(string name, bool ignoreCase) - Повертає OlmFolder для запитаного імені папки.
- OlmFolder.EnumerateMapiMessages() - Перебирає елементи MapiMessage у цій папці.
- MapiMessage.ToMailMessage(MailConversionOptions) - Перетворює MapiMessage у MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - Записує MIME MailMessage у потік MBOX.
Кроки
- Визначте шляхи до вхідного файлу OLM та вихідного файлу MBOX.
- Відкрийте файл OLM за допомогою
OlmStorage.FromFile. - Створіть записувач MBOX, використовуючи
MboxrdStorageWriterз вказаним шляхом виводу та параметрами. - Отримайте папку “Inbox” з файлу OLM, використовуючи пошук без урахування регістру.
- Пройдіться по всіх повідомленнях MAPI у папці “Inbox”.
- Перетворіть кожне повідомлення MAPI у стандартний
MailMessageоб’єкт. - Запишіть кожне перетворене повідомлення у файл MBOX.
Зразок коду
var olmPath = @"C:\data\archive.olm";
var mboxPath = @"C:\data\output.mbox";
// Load OLM file using OlmStorage
using (var olm = OlmStorage.FromFile(olmPath))
using (var mboxWriter = new MboxrdStorageWriter(mboxPath, new MboxSaveOptions()))
{
// Get the folder (case-insensitive example)
var inbox = olm.GetFolder("Inbox", true);
// Iterate MAPI messages (returns MapiMessage objects)
foreach (MapiMessage mapi in inbox.EnumerateMapiMessages())
{
// Convert to MailMessage and write to MBOX
var mail = mapi.ToMailMessage(new MailConversionOptions());
mboxWriter.WriteMessage(mail);
}
}
Примітка:
Якщо вам потрібен окремий MBOX для кожної папки, створіть окремий записувач для кожної папки OLM.
Якщо ви віддаєте перевагу одному архіву, повторно використовуйте один екземпляр MboxrdStorageWriter і викликайте WriteMessage кілька разів, як показано у наведеному вище прикладі коду.
Конвертація OLM у PST
Конвертація OLM у PST часто вимагає не лише копіювання повідомлень, а й відтворення ієрархії папок. Нижче наведений приклад коду, який демонструє, як конвертувати та копіювати структуру папок і повідомлення з архівного файлу Outlook OLM у Unicode PST‑файл за допомогою Aspose.Email for .NET.
Ключові елементи
- PersonalStorage.Create(path, FileFormatVersion.Unicode) – створює новий Unicode PST‑файл і повертає екземпляр PersonalStorage. Використовуйте PersonalStorage.Load(…) для відкриття існуючих PST‑файлів. Клас PersonalStorage є точкою входу для роботи з PST‑файлами.
- PersonalStorage.RootFolder – повертає кореневу FolderInfo PST‑файлу. Використовуйте FolderInfo.AddSubFolder(name) для створення підпапок. FolderInfo.GetSubFolders() повертає дочірні елементи, що дозволяє перевірити, чи існує папка з таким же ім’ям.
- OlmStorage.GetFolders() – повертає колекцію верхнього рівня OlmFolder (ієрархія папок OLM). Властивість OlmFolder.SubFolders містить дочірні елементи (для рекурсивного обходу).
- OlmFolder.EnumerateMapiMessages() – повертає екземпляри MapiMessage.
- FolderInfo.AddMessage(MapiMessage) – додає MapiMessage у папку PST.
Кроки
- Вкажіть шляхи до вихідного OLM‑файлу та цільового PST‑файлу.
- Відкрийте OLM‑архів для читання та створіть новий PST‑файл для запису.
- Отримайте колекцію папок верхнього рівня з OLM‑архіву.
- Створіть допоміжну функцію, яка знаходить або створює відповідну папку в PST за заданим ім’ям папки.
- Реалізуйте рекурсивну функцію, яка:
- Створює або отримує відповідну PST‑папку для кожної папки OLM.
- Копіює всі повідомлення з папки OLM у PST‑папку.
- Викликає себе для кожної підпапки OLM, зберігаючи структуру дерева.
- Викличте рекурсивну функцію для всіх папок верхнього рівня OLM, використовуючи кореневу папку PST як батьківську.
- Збережіть всю ієрархію папок і повідомлення у новому PST‑файлі, зберігаючи дані MAPI.
Зразок коду
var olmPath = @"C:\data\archive.olm";
var pstPath = @"C:\data\output.pst";
// Create a new PST file
using (var olm = OlmStorage.FromFile(olmPath))
using (var pst = PersonalStorage.Create(pstPath, FileFormatVersion.Unicode))
{
// Get top-level folders in OLM
var rootFolders = olm.GetFolders();
// Helper: map OlmFolder -> FolderInfo in PST by recursively creating subfolders
FolderInfo GetOrCreatePstFolder(FolderInfo parentPstFolder, string folderName)
{
// Try to find existing subfolder (case-insensitive)
foreach (var sub in parentPstFolder.GetSubFolders())
{
if (string.Equals(sub.DisplayName, folderName, StringComparison.OrdinalIgnoreCase))
return sub;
}
// Create new subfolder
return parentPstFolder.AddSubFolder(folderName);
}
// Recursive traversal
void ProcessOlmFolder(OlmFolder olmFolder, FolderInfo pstParent)
{
// Create / get the corresponding PST folder
var pstFolder = GetOrCreatePstFolder(pstParent, olmFolder.Name);
// Copy messages: OlmFolder.EnumerateMapiMessages returns MapiMessage instances
foreach (var mapi in olmFolder.EnumerateMapiMessages())
{
// AddMessage preserves MAPI data into PST
pstFolder.AddMessage(mapi);
}
// Recurse into OLM subfolders (OlmFolder.SubFolders property)
foreach (var child in olmFolder.SubFolders)
{
ProcessOlmFolder(child, pstFolder);
}
}
// Note: PST.RootFolder exists; create top-level folders under it.
foreach (var top in rootFolders)
{
// Skip creating a duplicate for default PST root folder names if needed
ProcessOlmFolder(top, pst.RootFolder);
}
}
Важливо: новостворений PST вже містить папку Deleted Items за замовчуванням — тому будьте обережні, щоб не дублювати стандартні папки.
Примітка:
Збереження типів папок: Підпапки OLM можуть відповідати певним спеціальним папкам Outlook (Inbox, Sent Items, Calendar). Якщо ви хочете створити заздалегідь визначені IPM папки (щоб Outlook розпізнавав їх як стандартні папки), використовуйте PersonalStorage.CreatePredefinedFolder або GetPredefinedFolder залежно від сценарію. CreatePredefinedFolder повертає FolderInfo. Використовуйте StandardIpmFolder enum, коли це доцільно.
Продуктивність: AddMessages (масове >add) швидше, ніж багато викликів AddMessage. Розгляньте збір повідомлень у пакети та використання FolderInfo.AddMessages(IEnumerable) для зменшення дискового I/O.
Висновок
У цій статті ми дізналися, як конвертувати файли Outlook for Mac (OLM) у формати PST та MBOX за допомогою C# та Aspose.Email for .NET. Ми розглянули, як відкривати та обробляти архіви OLM, витягувати повідомлення та зберігати ієрархію папок під час експорту даних у нові формати зберігання пошти. За допомогою Aspose.Email API розробники можуть легко автоматизувати кросплатформену міграцію електронної пошти, забезпечуючи сумісність між Outlook for Mac, Outlook for Windows та клієнтами з відкритим кодом, такими як Thunderbird.
Для отримання додаткових відомостей перегляньте Документація Aspose.Email та Посилання на API.
