PST 파일을 읽고 정보 검색
PST 파일 읽기 및 정보 가져오기
Aspose.Email for .NET은 Microsoft Outlook PST 파일을 읽기 위한 API를 제공합니다. 디스크 또는 스트림에서 PST 파일을 로드하여 다음 인스턴스에 넣을 수 있습니다: PersonalStorage 클래스와 해당 내용에 대한 정보를 가져옵니다(예: 폴더, 하위 폴더, 메시지). API는 PST 폴더에서 메시지를 탐색할 때 검색 폴더를 포함할 수 있는 기능도 제공합니다.
PST 파일 로드
Outlook PST 파일은 다음 인스턴스에 로드할 수 있습니다: PersonalStorage 클래스. 다음 코드 스니펫은 PST 파일을 로드하는 방법을 보여줍니다.
// Load the Outlook PST file
PersonalStorage personalStorage = PersonalStorage.FromFile(dataDir + @"PersonalStorage.pst");
폴더 정보 표시
PST 파일을 로드한 후 PersonalStorage 클래스를 사용하면 파일 표시 이름, 루트 폴더, 하위 폴더 및 메시지 수에 대한 정보를 얻을 수 있습니다. 다음 코드 스니펫은 PST 파일 이름, 폴더 및 폴더 내 메시지 수를 표시하는 방법을 보여줍니다.
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
string dst = dataDir + "PersonalStorage.pst";
// load PST file
PersonalStorage personalStorage = PersonalStorage.FromFile(dst);
// Get the folders information
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// Browse through each folder to display folder name and number of messages
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("-----------------------------------");
}
사용자 정의 폴더만 가져오기
PST/OST 파일에는 사용자가 만든 폴더가 포함될 수 있습니다. Aspose.Email은 다음을 사용하여 사용자 정의 폴더만 액세스하는 기능을 제공합니다: PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser 속성입니다. 이를 설정할 수 있습니다. PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser 속성을 true 로 설정하여 사용자 정의 폴더만 가져옵니다. 다음 코드 스니펫은 사용 예시를 보여줍니다. PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser 사용자 정의 폴더를 가져오기 위해.
using (PersonalStorage pst = PersonalStorage.FromFile(dataDir + "Outlook.pst"))
{
PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.OnlyFoldersCreatedByUser.Equals(true);
FolderInfoCollection subfolders = pst.RootFolder.GetSubFolders(queryBuilder.GetQuery());
foreach (FolderInfo folder in subfolders)
{
Console.WriteLine(folder.DisplayName);
}
}
폴더가 미리 정의된 것인지 확인
PST(Personal Storage Table) 파일 내 폴더를 열고 검사할 때, 각 폴더가 사전 정의된 폴더 유형인지 혹은 사전 정의된 폴더 유형의 하위 폴더인지 확인하고 각 폴더에 대한 정보를 얻을 수 있습니다.
다음은 FolderInfo.GetPredefinedType(bool getForTopLevelParent) 메서드는 폴더가 다음에 속하는지 확인할 수 있게 합니다: StandardIpmFolder. getForTopLevelParent 매개변수가 true이면 메서드는 다음을 반환합니다: StandardIpmFolder 최상위 상위 폴더에 대한 enum 값. 이는 현재 폴더가 미리 정의된 폴더의 하위 폴더인지 여부를 결정합니다. getForTopLevelParent 매개변수가 false이면 이것을 반환합니다: StandardIpmFolder 현재 폴더에 대한 enum 값.
다음 코드 샘플은 이 기능을 프로젝트에 구현하는 방법을 보여줍니다:
using (PersonalStorage pst = PersonalStorage.FromFile("my.pst"))
{
FolderInfoCollection folders = pst.RootFolder.GetSubFolders();
foreach (FolderInfo folder in folders)
{
Console.WriteLine($"Folder: {folder.DisplayName}");
Console.WriteLine($"Is predefined: {folder.GetPredefinedType(false) != StandardIpmFolder.Unspecified}");
Console.WriteLine("-----------------------------------");
}
}
상위 폴더 정보 검색
다음 코드 스니펫은 부모 폴더 정보를 다음으로부터 가져오는 방법을 보여줍니다: MessageInfo.
using (PersonalStorage pst = PersonalStorage.FromFile(fileName))
{
foreach (FolderInfo folder in pst.RootFolder.GetSubFolders())
{
foreach (MessageInfo msg in folder.EnumerateMessages())
{
FolderInfo folderInfo = pst.GetParentFolder(msg.EntryId);
}
}
}
경로로 하위 폴더 검색
다음은 FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) 메서드 오버로드를 통해 현재 PST 폴더에서 지정된 이름의 하위 폴더를 검색할 수 있습니다.
이 메서드는 다음 매개변수를 사용합니다:
- name - 검색할 하위 폴더의 이름을 지정합니다.
- ignoreCase - 하위 폴더 이름 검색이 대소문자를 구분할지 여부를 결정합니다. true 로 설정하면 검색이 대소문자를 구분하지 않으며, 그렇지 않으면 대소문자를 구분합니다.
- handlePathSeparator - 지정된 폴더 이름에 백슬래시가 포함된 경우 경로로 취급할지 여부를 지정합니다. true 로 설정하면 메서드는 폴더 이름을 경로로 해석하여 해당 경로를 사용해 하위 폴더로 이동을 시도합니다. false 로 설정하면 메서드는 폴더 이름을 단순한 이름으로 처리하여 정확히 일치하는 이름의 하위 폴더를 검색합니다.
다음 코드 샘플은 프로젝트에서 이 메서드를 구현하는 방법을 보여줍니다:
var folder = pst.RootFolder.GetSubFolder(@"Inbox\Reports\Jan", true, true);
이 예제에서 메서드는 ‘Jan’이라는 이름의 폴더를 반환하며, 위치는 Inbox\Reports\ 루트 폴더를 기준으로 하는 경로.
RSS 피드 및 검색 가능한 폴더
PersonalStorage의 표준 RSS 피드 폴더
Aspose.Email을 사용하면 RSS 피드를 보유하는 사전 정의된 폴더에 대한 참조를 얻을 수 있습니다. 이는 Outlook PST 파일에 저장된 RSS 피드에 프로그래밍으로 접근하고 조작하려는 경우에 유용합니다. RssFeeds 값을 다음에 전달하세요: StandardIpmFolder 열거형.
다음 코드 예제는 RSS 피드 폴더를 가져오는 방법을 보여줍니다.
using (var pst = PersonalStorage.FromFile("my.pst", false))
{
var rssFolder = pst.GetPredefinedFolder(StandardIpmFolder.RssFeeds);
}
RSS 피드 폴더를 추가하려면 다음 코드 스니펫을 사용하십시오:
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
var rssFolder = pst.CreatePredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}
검색 가능한 폴더 구문 분석
PST/OST는 일반 폴더 외에도 검색 가능한 폴더를 포함할 수 있습니다. Aspose.Email은 다음을 제공합니다. FolderKind 해당 검색 폴더에서 메시지를 지정하기 위한 열거자와 함께 EnumerateFolders 및 GetSubFolders 메서드. 다음 코드 스니펫은 검색 가능한 폴더를 파싱하는 방법을 보여줍니다.
using (PersonalStorage pst = PersonalStorage.FromFile("my.pst"))
{
FolderInfoCollection folders = pst.RootFolder.GetSubFolders(FolderKind.Search | FolderKind.Normal);
// Browse through each folder to display folder name and number of messages
foreach (FolderInfo folder in folders)
{
Console.WriteLine($"Folder: {folder.DisplayName}");
FolderInfoCollection subFolders = folder.GetSubFolders(FolderKind.Search | FolderKind.Normal);
foreach (FolderInfo subFolder in subFolders)
{
Console.WriteLine($"Sub-folder: {subFolder.DisplayName}");
}
}
}
PST 파일 탐색 API
탐색 API는 원본 파일 일부 데이터가 손상된 경우에도 예외를 발생시키지 않고 가능한 한 모든 PST 항목을 추출할 수 있게 해줍니다. 다음 단계는 이 API를 사용하는 방법을 보여줍니다.
사용 PersonalStorage 생성자와 Load FromFile 메서드 대신 사용하는 메서드.
생성자를 통해 콜백 메서드를 정의할 수 있습니다.
using (var currentPst = new PersonalStorage((exception, itemId) => { /* Exception handling code. */ }))
로드 및 탐색 중 발생한 예외는 콜백 메서드를 통해 확인할 수 있습니다.
다음은 Load 파일이 성공적으로 로드되고 추가 탐색이 가능하면 메서드는 ’true’를 반환합니다. 파일이 손상되어 탐색이 불가능한 경우 ‘false’를 반환합니다.
if (currentPst.Load(inputStream))
이를 통해 예외를 발생시키지 않고 손상된 PST 파일도 열고 탐색할 수 있습니다. 예외와 손상된 항목은 콜백 메서드에서 처리됩니다.
using (PersonalStorage pst = new PersonalStorage((exception, itemId) => { /* Exception handling code. */ }))
{
if (pst.Load(@"test.pst"))
{
GetAllMessages(pst, pst.RootFolder);
}
}
private static void GetAllMessages(PersonalStorage pst, FolderInfo folder)
{
foreach (var messageEntryId in folder.EnumerateMessagesEntryId())
{
MapiMessage message = pst.ExtractMessage(messageEntryId);
}
foreach (var subFolder in folder.GetSubFolders())
{
GetAllMessages(pst, subFolder);
}
}
PST 파일에서 항목 카테고리 색상 검색
Aspose.Email을 사용하면 PST 파일에서 이름 및 색상을 포함한 카테고리 정보를 검색할 수 있습니다. 카테고리 데이터를 추출하여 개별 PST 항목과 매칭할 수 있습니다. 다음 API 멤버를 사용하십시오:
- OutlookCategoryColor enum - 카테고리와 연결된 색상을 나타냅니다.
- PstItemCategory 클래스 - 카테고리 이름과 색상에 대한 속성을 제공합니다.
- GetCategories 메서드 - 이름과 색상을 포함한 카테고리 목록을 반환합니다.
다음 코드 샘플은 PST 파일에서 사용 가능한 모든 카테고리를 검색하고 특정 이메일 메시지와 연결된 카테고리를 일치시키는 방법을 보여줍니다.
PST에서 사용 가능한 카테고리 검색
using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
var categories = pst.GetCategories();
foreach(var category in categories)
{
Console.WriteLine(category);
}
}
카테고리 이름을 색상과 일치시키기
using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
// Get all categories from the PST
var availableCategories = pst.GetCategories();
// Extract a message from the PST and retrieve the list of category names for the message
var messageCategoryList = FollowUpManager.GetCategories(pst.ExtractMessage(messageInfo));
// Iterate through each category in the message and match it with the PST category list
foreach (var messageCategory in messageCategoryList)
{
var category = availableCategories.Find(c => c.Name.Equals(messageCategory, StringComparison.OrdinalIgnoreCase));
if (category != null)
{
// Print the category name and its associated color
Console.WriteLine(category);
}
else
{
Console.WriteLine($"Category: {messageCategory}, Color: Not found");
}
}
}