플랫폼 간 이동 시 **Outlook for Mac (OLM)**에서 널리 지원되는 형식인 MBOX(Thunderbird / Unix 메일함용)와 PST (Outlook for Windows)로 이메일 데이터를 마이그레이션하는 것은 일반적인 작업입니다. Microsoft Outlook for Mac은 이메일, 연락처, 캘린더 및 기타 항목을 저장하기 위해 OLM(Outlook for Mac Data File) 형식을 사용합니다. 그러나 이 데이터를 Windows 기반 환경이나 다른 이메일 클라이언트로 마이그레이션하려면 OLM 파일을 Thunderbird 및 Apple Mail과 같은 클라이언트에서 사용하는 MBOX 또는 Windows용 Outlook Personal Storage Table인 PST와 같은 보편적인 형식으로 변환해야 하는 경우가 많습니다.
이 기사에서는 C#을 사용하여 Aspose.Email for .NET으로 OLM 파일을 PST 및 MBOX 형식으로 변환하는 방법을 보여드립니다. 이 강력한 API는 복잡한 이메일 마이그레이션 작업을 프로그래밍 방식으로 단순화합니다. OLM 파일을 열고, 메시지를 추출하고, 폴더 계층 구조를 보존하며, 여러 플랫폼용 휴대용 이메일 아카이브를 생성하는 방법을 배우게 됩니다.
Aspose.Email for .NET를 사용한 변환
[Aspose.Email for .NET][]은 OLM, MBOX 및 PST를 포함한 다양한 이메일 형식을 다루는 포괄적인 기능을 제공합니다. 직관적인 API와 방대한 문서를 통해 복잡한 변환 작업을 간소화합니다. 아래에서는 C#을 사용하여 OLM을 MBOX 및 PST로 변환하는 단계를 살펴보겠습니다.
시작하려면 .NET 프로젝트에 Aspose.Email NuGet 패키지를 설치하십시오:
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 파일에 대한 파일 경로를 정의합니다.
OlmStorage.FromFile을 사용하여 OLM 파일을 엽니다.- 지정된 출력 경로와 옵션을 사용하여
MboxrdStorageWriter로 MBOX 라이터를 생성합니다. - 대소문자를 구분하지 않는 검색을 사용하여 OLM 파일에서 “Inbox” 폴더에 접근합니다.
- “Inbox” 폴더에 있는 모든 MAPI 메시지를 반복합니다.
- 각 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);
}
}
Note:
폴더당 하나의 MBOX를 원한다면 각 OLM 폴더마다 별도의 writer를 생성하세요.
단일 아카이브를 선호한다면 위 코드 샘플에 표시된 대로 MboxrdStorageWriter 인스턴스를 재사용하고 WriteMessage를 반복 호출하십시오.
OLM을 PST로 변환
Outlook OLM 아카이브 파일을 Unicode PST 파일로 변환하고 폴더 구조와 메시지를 복사하려면 Aspose.Email for .NET을 사용합니다.
핵심 멤버
- PersonalStorage.Create(path, FileFormatVersion.Unicode) - 새 Unicode PST 파일을 생성하고 PersonalStorage 인스턴스를 반환합니다. 기존 PST를 열려면 PersonalStorage.Load(…)을 사용하세요. PersonalStorage 클래스는 PST 파일 작업을 위한 진입점입니다.
- PersonalStorage.RootFolder - PST의 루트 FolderInfo를 제공합니다. 하위 폴더를 만들려면 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 내부에 일치하는 폴더를 찾거나 생성하는 도우미 함수를 정의합니다.
- 재귀 함수를 정의하여:
- 각 OLM 폴더에 대해 해당 PST 폴더를 만들거나 가져옵니다.
- OLM 폴더의 모든 메시지를 PST 폴더로 복사합니다.
- 폴더 트리를 유지하기 위해 OLM 폴더의 각 하위 폴더에 대해 자신을 호출합니다.
- PST 루트 폴더를 부모로 사용하여 모든 최상위 OLM 폴더에 재귀 함수를 호출합니다.
- 새로운 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);
}
}
Important: 새로 만든 PST에는 기본적으로 Deleted Items 폴더가 이미 포함되어 있으므로 기본 폴더를 중복 생성하지 않도록 주의하십시오.
참고:
폴더 유형 보존: OLM 하위 폴더는 특정 Outlook 특수 폴더(받은 편지함, 보낸 편지함, 일정)와 매핑될 수 있습니다. 사전 정의된 IPM 폴더를 만들고 싶다면(Outlook이 이를 표준 폴더로 인식하도록), 상황에 따라 PersonalStorage.CreatePredefinedFolder 또는 GetPredefinedFolder를 사용하십시오. CreatePredefinedFolder은 FolderInfo를 반환합니다. 적절할 때는 StandardIpmFolder 열거형을 사용하십시오.
성능: AddMessages (대량 추가)는 AddMessage를 여러 번 호출하는 것보다 빠릅니다. 메시지를 배치로 수집하고 FolderInfo.AddMessages(IEnumerable)를 사용하여 디스크 I/O를 줄이는 것을 고려하십시오.
결론
이 문서에서는 Aspose.Email for .NET을 사용하여 C#에서 Outlook for Mac (OLM) 파일을 PST 및 MBOX 형식으로 변환하는 방법을 배웠습니다. OLM 아카이브를 열고 처리하며, 메시지를 추출하고, 폴더 계층 구조를 유지하면서 데이터를 새로운 메일 저장 형식으로 내보내는 방법을 살펴보았습니다. Aspose.Email API를 사용하면 개발자가 크로스 플랫폼 이메일 마이그레이션을 쉽게 자동화할 수 있어 Outlook for Mac, Outlook for Windows 및 Thunderbird와 같은 오픈 소스 클라이언트 간의 호환성을 보장합니다.
자세한 내용은 Aspose.Email 문서 및 API 참조를 확인하십시오.
