C# .NET에서 MS Outlook PST 파일 읽기

PST(Personal Storage Table)는 MS Outlook, Exchange 및 Windows Messaging과 같은 다양한 Microsoft 프로그램에서 사용되는 저장 파일 형식입니다. PST 파일은 메시지, 연락처, 캘린더, 이벤트 등을 저장할 수 있습니다. 어떤 경우에는 PST 파일을 구문 분석하고 프로그래밍 방식으로 데이터를 추출해야 할 수 있습니다. 이를 달성하기 위해 이 문서에서는 C# .NET을 사용하여 MS Outlook PST 파일을 읽는 방법을 보여줍니다. 특히 폴더 정보를 추출하고 이메일을 읽고 PST 파일에서 연락처를 가져오는 방법을 배웁니다.

Outlook PST 파일을 읽는 .NET API

Aspose.Email for .NET는 .NET 응용 프로그램 내에서 이메일을 만들고 보낼 수 있는 강력한 이메일 처리 API입니다. 또한 널리 사용되는 이메일 및 저장 파일 형식 작업을 지원합니다. 이 API를 사용하여 PST 파일에서 폴더 정보, 메시지 및 연락처를 읽습니다. API를 다운로드하거나 NuGet을 통해 설치할 수 있습니다.

PM> Install-Package Aspose.Email -Version 22.3.0

C# .NET에서 Outlook PST 파일 읽기

다음은 PST 파일을 읽고 C#에서 정보를 추출하는 단계입니다.

다음 코드 샘플은 PST 파일을 구문 분석하고 폴더 정보를 가져오는 방법을 보여줍니다.

// PST 파일 로드
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// 폴더 정보 가져오기
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// 각 폴더를 탐색하여 해당 정보를 표시합니다.
foreach (FolderInfo folderInfo in folderInfoCollection)
{
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("Total items: " + folderInfo.ContentCount);
    Console.WriteLine("Total unread items: " + folderInfo.ContentUnreadCount);
    Console.WriteLine("-----------------------------------");
}

C#의 PST 파일에서 이메일 읽기

전자 메일은 MS Outlook에서 PST 파일에 저장하는 주요 엔터티입니다. C#의 PST 파일에서 전자 메일 메시지를 읽는 방법을 살펴보겠습니다.

다음 코드 샘플은 C# .NET의 PST 파일에서 메시지를 추출하는 방법을 보여줍니다.

// Outlook PST 파일 로드
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// PST 파일의 표시 형식 가져오기
Console.WriteLine("Display Format: " + pst.Format);

// 폴더 및 메시지 정보 가져오기
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// 재귀 메서드를 호출하여 각 폴더에서 msg 파일을 추출합니다.
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// 폴더의 내용을 표시하는 재귀적 방법입니다.
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // 폴더 이름 표시
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // 이 폴더의 모든 메시지를 반복합니다.
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // MapiMessage 인스턴스에서 메시지 가져오기
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // 이 메시지를 msg 형식으로 디스크에 저장
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // 이 메시지를 msg 형식으로 스트리밍하려면 저장하세요.
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // 각 하위 폴더에 대해 이 메서드를 재귀적으로 호출합니다.
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

C#의 PST 파일에서 연락처 추출

어떤 경우에는 PST 파일에 저장된 연락처 정보를 추출해야 할 수도 있습니다. 다음 단계는 C#에서 PST 파일의 연락처에 액세스하는 방법을 보여줍니다.

다음 코드 샘플은 C#의 PST 파일에서 연락처를 추출하는 방법을 보여줍니다.

// Outlook PST 파일 로드
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// 연락처 폴더 가져오기
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// 이 폴더의 모든 연락처를 반복합니다.
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // 연락처 정보 얻기
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // MapiContact로 전송
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // 화면에 일부 콘텐츠 표시
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // MSG 형식으로 디스크에 저장
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // 파일명으로 사용할 수 없는 불법 문자 제거
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

무료 API 라이선스 받기

임시 라이선스 받기를 통해 .NET용 Aspose.Email을 무료로 사용해 볼 수 있습니다.

결론

이 기사에서는 C# .NET에서 프로그래밍 방식으로 PST 파일을 읽는 방법을 배웠습니다. 또한 C#에서 폴더 정보를 읽고, 이메일을 가져오고, PST 파일에서 연락처를 추출하는 방법을 살펴보았습니다. 또한 문서를 사용하여 .NET용 Aspose.Email에 대해 자세히 알아볼 수 있습니다. 또한 포럼에서 질문이나 질문을 공유할 수 있습니다.

또한보십시오