Outlook 파일 읽기 및 변환
OST 파일 작업
Aspose.Email for .NET은 Microsoft Outlook OST 파일을 읽기 위한 API를 제공합니다. 디스크나 스트림에서 OST 파일을 로드하여 인스턴스로 만들 수 있습니다. Aspose.Email.Outlook.Pst.PersonalStorage 폴더, 하위 폴더 및 메시지와 같은 내용을 액세스하는 클래스입니다. Microsoft Outlook은 POP3 또는 IMAP 메일 서버를 사용할 때 이메일을 저장하기 위해 PST 파일을 생성합니다. 반면에 Microsoft Exchange가 메일 서버인 경우 OST 파일을 생성합니다. OST 파일은 PST 파일보다 큰 파일 크기도 지원합니다.
OST 파일 읽기
Aspose.Email를 사용해 OST 파일을 읽는 과정은 PST 파일을 읽는 것과 정확히 동일합니다. 동일한 코드로 PST와 OST 파일 모두를 읽을 수 있습니다: 올바른 파일 이름을 제공하기만 하면 됩니다. PersonalStorage.FromFile() 방법. 다음 코드 스니펫은 OST 파일을 읽는 방법을 보여줍니다.
OST를 PST로 변환
사용해 보세요!
무료로 이메일 및 메시지 아카이브를 온라인에서 변환하세요 Aspose.Email 변환 앱.
OST 파일에 대한 다른 작업을 수행하려면 다음 페이지를 참고하십시오:
- PST 파일을 읽고 정보 검색
- Outlook PST 파일에서 메시지 정보 가져오기
- Outlook PST 파일에서 메시지를 추출하고 MSG 형식으로 디스크 또는 스트림에 저장
- Outlook PST 파일에서 연락처 정보를 가져와 MSG 형식으로 디스크에 저장
PST를 OST로 변환
Aspose.Email에서는 PST를 OST로 변환하는 것을 지원하지 않습니다. OST는 계정을 추가하고 메일 서버와 동기화할 때 Outlook에 의해 항상 생성되기 때문입니다. PST와 OST 파일의 차이는 PST는 로컬에만 존재하고, OST 내용은 이메일 서버에도 존재한다는 점입니다. 따라서 로컬 용도로 PST를 OST로 변환할 필요가 없습니다. 대신 Outlook의 가져오기/내보내기 마법사를 사용해 PST를 기존 계정으로 가져올 수 있습니다.
OLM은 Microsoft Outlook에서 로컬 데이터(이메일, 첨부 파일, 메모, 캘린더 데이터, 연락처, 작업, 기록 등)를 저장하기 위해 사용하는 특정 파일 형식입니다. OLM 파일은 Outlook for Mac에서만 호환되며, Windows용 Outlook에서는 PST 파일 형식을 사용하므로 열거나 접근할 수 없습니다.
OLM 파일 작업
OLM 파일 열기
OLM 형식 파일은 두 가지 방법으로 열 수 있습니다:
- 생성자 사용
- 정적 FromFile 메서드 사용
이 메서드들 사이에는 동작 차이가 있습니다. 아래 섹션을 참고하십시오.
생성자 사용
파일을 열려면, 다음의 생성자를 호출합니다 OlmStorage 클래스이며 전체 파일 이름이나 스트림을 인수로 전달합니다:
var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);
FromFile 정적 메서드 사용
파일을 열려면 정적 메서드를 사용합니다 FromFile 전체 파일명 또는 스트림을 인수로 전달합니다:
var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);
폴더 가져오기
OLM 파일의 디렉터리 구조에 접근하려면, 해당 클래스의 인스턴스를 생성합니다: OlmStorage 생성자를 사용해 클래스를 인스턴스화하고 파일 경로를 전달합니다. 파일이 열리면 해당 디렉터리 구조에 접근합니다. FolderHierarchy 속성. 이 속성은 목록을 반환합니다: OlmFolder 각 객체는 OLM 파일의 디렉터리를 나타냅니다. 디렉터리 구조를 더 탐색하려면 다음에 접근하세요: SubFolders 각 객체의 속성으로, 해당 객체의 하위 디렉터리 목록을 반환합니다. 이러한 속성을 사용하면 OLM 파일의 전체 디렉터리 계층 구조를 탐색하고 포함된 모든 디렉터리와 하위 디렉터리에 접근할 수 있습니다.
다음 예제는 계층 순서로 모든 폴더 목록을 표시합니다:
using (var olm = new OlmStorage(fileName))
{
PrintAllFolders(olm.FolderHierarchy, string.Empty);
}
private void PrintAllFolders(List<OlmFolder> folderHierarchy, string indent)
{
foreach (var folder in folderHierarchy)
{
Console.WriteLine($"{indent}{folder.Name}");
PrintAllFolders(folder.SubFolders, indent+"-");
}
}
사용할 때 FromFile OLM 파일을 열기 위한 메서드, the FolderHierarchy 속성은 기본적으로 초기화되지 않으며 null을 반환합니다. 이 경우 GetFolders 메서드를 명시적으로 호출하여 초기화하십시오. FolderHierarchy 속성을 사용하여 OLM 파일의 디렉터리 목록을 가져옵니다:
using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}
또한, 이름으로 폴더를 가져올 수도 있습니다:
- 호출하십시오 GetFolder 메서드.
- 첫 번째 인수로 폴더 이름을 전달하고, 두 번째 매개변수로 폴더 검색 시 대소문자를 무시할지 여부를 나타내는 값을 전달합니다.
using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}
이메일 목록
OlmFolder 클래스(폴더를 나타내는)는 이메일 목록을 가져오는 다음 메서드를 제공합니다:
- EnumerateMessages 폴더 내 이메일을 반복하는 기능을 구현합니다. 이 경우 각 반복은 반환합니다 OlmMessageInfo 이메일에 대한 간단한 정보를 제공하는 객체.
- EnumerateMapiMessages, 폴더 내 이메일을 반복하는 기능도 구현하지만, 이 경우 각 반복은 반환합니다 MapiMessage 모든 속성을 포함한 이메일 자체를 나타내는 객체.
EnumerateMessages 메서드 사용
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}
EnumerateMapiMessages 메서드 사용
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var msg in folder.EnumerateMapiMessages())
{
// save message in MSG format
msg.Save($"{msg.Subject}.msg");
}
}
다른 유용한 속성
OlmFolder 클래스의 다른 유용한 속성은 다음과 같습니다: HasMessages 및 MessageCount 폴더에 메시지가 있는지 여부와 메시지 개수를 반환하는 속성들.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}
메시지의 수정 날짜 가져오기 또는 설정하기
수정 날짜는 OLM 메시지가 마지막으로 수정된 날짜와 시간을 나타냅니다. 이를 사용할 수 있습니다 OlmMessageInfo.ModifiedDate OLM 메시지의 수정 날짜 값을 가져오거나 업데이트하는 속성.
다음은 해당 속성 사용을 보여주는 예시입니다:
foreach (OlmMessageInfo messageInfo in inboxFolder.EnumerateMessages())
{
DateTime modifiedDate = messageInfo.ModifiedDate;
}
이메일 및 항목 추출
OlmStorage 클래스에는 ExtractMapiMessage 이메일을 추출할 수 있는 메서드. 이 메서드는 OlmMessageInfo 객체.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
if (messageInfo.Date == DateTime.Today)
{
// Extracts today's messages form Inbox
var msg = olm.ExtractMapiMessage(messageInfo);
}
}
}
Traversal API 사용
원본 파일의 일부 데이터가 손상되었더라도 예외를 발생시키지 않고 가능한 한 모든 항목을 Outlook OLM 파일에서 추출할 수 있습니다. 이를 수행하려면 다음을 사용하세요. OlmStorage(TraversalExceptionsCallback callback) 생성자와 Load(string fileName) FromFile 메서드 대신 사용하는 메서드입니다. 생성자를 통해 콜백 메서드를 정의할 수 있습니다.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
콜백 메서드는 로드 및 탐색 중 발생하는 예외를 제공하도록 합니다.
다음은 Load 파일이 성공적으로 로드되고 추가 탐색이 가능하면 메서드는 ’true’를 반환합니다. 파일이 손상되어 탐색이 불가능한 경우 ‘false’를 반환합니다.
if (olm.Load(fileName))
다음 코드 스니펫과 단계는 이 API를 사용하는 방법을 보여줍니다:
- 새 인스턴스를 생성합니다 OlmStorage 클래스이며, 프로세스 중 발생하는 모든 예외를 처리하기 위해 예외 처리 콜백을 전달합니다.
- 다음 메서드를 호출하여 OLM 파일을 로드합니다. Load OlmStorage 인스턴스의 메서드.
- OLM 파일이 성공적으로 로드되면, 호출하여 폴더 계층 구조를 얻습니다. GetFolders OlmStorage 인스턴스의 메서드입니다. 이는 OlmFolder 객체 목록을 반환합니다.
- OlmStorage 인스턴스와 OlmFolder 객체 리스트를 전달하여 ExtractItems 메서드를 호출합니다.
- ExtractItems 메서드에서 folders 리스트의 각 폴더를 반복합니다.
- 폴더에 메시지(이메일)가 포함되어 있으면, Console.WriteLine(folder)를 사용하여 폴더 이름을 콘솔에 출력합니다.
- OlmStorage 인스턴스에서 EnumerateMessages 메서드를 호출하고 현재 폴더를 인수로 전달하여 현재 폴더의 메시지를 반복합니다.
- Console.WriteLine(msg.Subject)를 사용하여 각 메시지의 제목을 콘솔에 출력합니다.
- 폴더에 하위 폴더가 있는 경우, OlmStorage 인스턴스와 현재 폴더의 하위 폴더를 전달하면서 ExtractItems 메서드를 재귀적으로 다시 호출합니다.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
{
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);
}
}
}
식별자별 메시지 추출
때때로 식별자를 사용하여 선택된 메시지를 추출해야 할 경우가 있습니다. 예를 들어 애플리케이션이 데이터베이스에 식별자를 저장하고 필요할 때 메시지를 추출합니다. 이는 특정 메시지를 찾기 위해 매번 전체 저장소를 탐색하는 것을 피하는 효율적인 방법입니다. 이 기능은 OLM 저장소에서 사용할 수 있습니다. EntryId 속성 OlmMessageInfo 클래스는 메시지 엔트리 식별자를 가져옵니다. 오버로드된 ExtractMapiMessage(string id) 메서드 OlmStorage 클래스는 OLM에서 메시지를 가져옵니다.
아래 코드는 식별자를 사용하여 OLM에서 메시지를 추출하는 방법을 보여줍니다.
코드는 다음 단계를 수행합니다:
- foreach 루프를 시작하여 목록을 반복합니다: OlmMessageInfo 객체. 루프는 다음을 사용합니다 EnumerateMessages olmFolder 객체의 메서드를 사용하여 현재 반복 중인 폴더의 모든 메시지 목록을 가져옵니다.
- 루프는 스토리지에서 해당 MapiMessage 객체를 호출하여 추출합니다. ExtractMapiMessage(string id) 메서드 OlmStorage 클래스, 전달되는 EntryId 현재 메시지를 매개변수로 사용합니다.
검색된 MapiMessage 객체를 사용하여 메시지 내용을 액세스하고 조작할 수 있습니다. 폴더의 모든 메시지가 처리될 때까지 루프가 계속됩니다.
foreach (OlmMessageInfo msgInfo in olmFolder.EnumerateMessages())
{
MapiMessage msg = storage.ExtractMapiMessage(msgInfo.EntryId);
}
폴더 경로 가져오기
OML 파일의 폴더 경로도 가져올 수 있습니다. Aspose.Email은 제공합니다 OlmFolder.Path 폴더 경로를 반환하는 속성. 다음 코드 스니펫은 사용법을 보여줍니다 OlmFolder.Path OML 파일에서 폴더 경로를 가져오는 속성.
var storage = new OlmStorage("SampleOLM.olm");
PrintPath(storage, storage.FolderHierarchy);
public static void PrintPath(OlmStorage storage, List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
// print the current folder path
Console.WriteLine(folder.Path);
if (folder.SubFolders.Count > 0)
{
PrintPath(storage, folder.SubFolders);
}
}
}
폴더 내 항목 수
폴더 내 항목 수를 셀 수도 있습니다. Aspose.Email은 제공합니다 OlmFolder.MessageCount 폴더 내 항목 수를 반환하는 속성. 다음 코드 스니펫은 사용법을 보여줍니다 OlmFolder.MessageCount OML 파일 폴더 내 항목 수를 가져오는 속성.
var storage = new OlmStorage("SampleOLM.olm");
PrintMessageCount(storage.FolderHierarchy);
public static void PrintMessageCount(List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
Console.WriteLine("Message Count [" + folder.Name + "]: " + folder.MessageCount);
}
}
OlmStorage의 총 항목 수 가져오기
OlmStorage 클래스에도 있습니다 GetTotalItemsCount() OLM 저장소에 포함된 메시지 항목 총 개수를 반환하는 메서드.
using (var olm = new OlmStorage("storage.olm"))
{
var count = olm.GetTotalItemsCount();
}
Outlook 카테고리 색상 가져오기
OLM 파일에 저장된 카테고리 색상이나 Outlook 항목 카테고리를 작업하려면 Aspose.Email이 다음 솔루션을 제공합니다:
- OlmItemCategory 클래스 - 이름과 16진수 형식의 색상으로 제공되는 Outlook 항목 카테고리를 나타냅니다.
- GetCategories() 메서드 OlmStorage 클래스 - 카테고리 목록을 검색합니다.
다음 코드 샘플은 OML 저장소에서 사용된 모든 카테고리를 가져오는 방법을 보여줍니다:
using (var olm = OlmStorage.FromFile("storage.olm"))
{
var categories = olm.GetCategories();
foreach (var category in categories)
{
Console.WriteLine($"Category name: {category.Name}");
//Color is represented as a hexadecimal value: #rrggbb
Console.WriteLine($"Category color: {category.Color}");
}
}
아래 코드 샘플은 메시지 카테고리 색상을 가져오는 방법을 보여줍니다:
foreach (var msg in olm.EnumerateMessages(folder))
{
if (msg.Categories != null)
{
foreach (var msgCategory in msg.Categories)
{
Console.WriteLine($"Category name: {msgCategory}");
var categoryColor = cat.First(c => c.Name.Equals(msgCategory, StringComparison.OrdinalIgnoreCase)).Color;
Console.WriteLine($"Category color: {categoryColor}");
}
}
}
OLM을 PST로 변환
OLM OLM은 Microsoft Outlook for Mac 시스템에서 사용되는 데이터베이스 파일 형식입니다. OLM 파일은 이메일 메시지, 캘린더 데이터, 연락처 데이터 및 애플리케이션 설정을 저장합니다. OLM 파일은 Outlook for Windows에서 지원되지 않으며, 따라서 Outlook for Mac(OLM) 파일을 Windows용 Outlook에서 열 수 없습니다. Outlook for Mac에서 Windows용 Outlook으로 메일함을 마이그레이션하려면 Mac OLM 파일을 Outlook PST 파일 형식으로 변환해야 합니다.
코드 단계
OLM 파일을 PST로 변환하려면 아래 단계에 따르세요:
- 다음의 인스턴스를 생성합니다 OlmStorage 소스 OLM을 여는 클래스.
- 소스 OLM 파일을 엽니다.
- 다음으로 새 PST 파일을 생성합니다: Create 메서드.
- 메시지 클래스를 폴더 클래스로 매핑하는 GetContainerClass 메서드를 만듭니다.
- EnumerateMapiMessages 메서드를 사용하여 OLM에서 각 폴더와 그 메시지를 재귀적으로 읽고 AddSubFolder 및 AddMessage 메서드를 사용하여 같은 순서대로 PST에 추가하는 AddToPst 메서드를 만듭니다.
코드 샘플
다음 코드 샘플은 OLM을 PST로 변환하는 방법을 보여줍니다.
Main 메서드:
// create an instance of OlmStorage class to open source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
// recursively reads each folder and its messages
// and adds them to the PST in the same order
foreach (var olmFolder in olm.FolderHierarchy)
{
AddToPst(pst.RootFolder, olmFolder);
}
}
GetContainerClass 메서드 구현:
public string GetContainerClass(string messageClass)
{
if (messageClass.StartsWith("IPM.Contact") || messageClass.StartsWith("IPM.DistList"))
{
return "IPF.Contact";
}
if (messageClass.StartsWith("IPM.StickyNote"))
{
return "IPF.StickyNote";
}
if (messageClass.StartsWith("IPM.Activity"))
{
return "IPF.Journal";
}
if (messageClass.StartsWith("IPM.Task"))
{
return "IPF.Task";
}
if (messageClass.StartsWith("IPM.Appointment") || messageClass.StartsWith("IPM.Schedule.meeting"))
{
return "IPF.Appointment";
}
return "IPF.Note";
}
AddToPst 메서드 구현:
public void AddToPst(FolderInfo pstFolder, OlmFolder olmFolder)
{
FolderInfo pstSubFolder = pstFolder.GetSubFolder(olmFolder.Name);
foreach (var msg in olmFolder.EnumerateMapiMessages())
{
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name, GetContainerClass(msg.MessageClass));
}
pstSubFolder.AddMessage(msg);
}
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name);
}
foreach (var olmSubFolder in olmFolder.SubFolders)
{
AddToPst(pstSubFolder, olmSubFolder);
}
}