C#.NETでMSOutlookPSTファイルを読む

PST(個人用ストレージテーブル)は、MS Outlook、Exchange、WindowsメッセージングなどのさまざまなMicrosoftプログラムで使用されるストレージファイル形式です。 PSTファイルは、メッセージ、連絡先、カレンダー、イベントなどを保存できます。場合によっては、PSTファイルを解析し、プログラムでそこからデータを抽出する必要があります。これを実現するために、この記事では、C#.NETを使用してMSOutlookPSTファイルを読み取る方法を示します。特に、フォルダーの情報を抽出する方法、電子メールを読む方法、およびPSTファイルから連絡先を取得する方法を学習します。

OutlookPSTファイルを読み取るための.NET API

Aspose.Email for .NETは、.NETアプリケーション内から電子メールを作成および送信できる強力な電子メール処理APIです。さらに、一般的な電子メールおよびストレージファイル形式での作業をサポートします。このAPIを使用して、PSTファイルからフォルダーの情報、メッセージ、および連絡先を読み取ります。 APIをダウンロードするか、NuGetからインストールできます。

PM> Install-Package Aspose.Email -Version 22.3.0

C#.NETでOutlookPSTファイルを読み取る

以下は、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ファイルからメールを読む

電子メールは、MSOutlookによってPSTファイルに保存される主要なエンティティです。それでは、C#でPSTファイルから電子メールメッセージを読み取る方法を見てみましょう。

  • PersonalStorage.FromFile()メソッドを使用してPSTファイルをロードします。
  • PersonalStorage.RootFolderプロパティを使用してルートフォルダにアクセスします。
  • FolderInfo.GetContents()メソッドを使用してメッセージコレクションを取得します。
  • コレクション内のメッセージをループして、各メッセージのフィールドを読み取ります。

次のコードサンプルは、C#.NETのPSTファイルからメッセージを抽出する方法を示しています。

// OutlookPSTファイルをロードします
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);
                
        // このメッセージをメッセージ形式でディスクに保存します
        message.Save(message.Subject.Replace(":", " ") + ".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ファイルから連絡先を抽出する方法を示しています。

// OutlookPSTファイルをロードします
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ライセンスを取得する

一時ライセンスの取得を使用すると、Aspose.Emailfor.NETを無料で試すことができます。

結論

この記事では、C#.NETでプログラムでPSTファイルを読み取る方法を学習しました。さらに、フォルダー情報の読み取り、電子メールのフェッチ、およびC#のPSTファイルからの連絡先の抽出方法についても説明しました。さらに、ドキュメントを使用して、Aspose.Emailfor.NETの詳細を調べることができます。また、フォーラムで質問や質問を共有することもできます。

関連項目