File SDK - メールの .msg ファイルを処理する (C#)
File SDK は、アプリケーションで MSG 機能フラグを有効にしなければならない点を除き、他の種類のファイルとまったく同じ方法で .msg ファイルのラベル付け操作をサポートします。 ここでは、このフラグを設定する方法を見ていきます。
既に説明したように、IFileEngine
をインスタンス化するためには、設定オブジェクト FileEngineSettings
が必要となります。 特定のインスタンスに対してアプリケーションが設定する必要のあるカスタム設定のパラメーターは、FileEngineSettings を使用して渡すことができます。 .msg ファイルの処理を有効にする enable_msg_file_type
のフラグは、FileEngineSettings
の CustomSettings
プロパティを使用して設定します。
前提条件
先に進む前に、次の前提条件をまだ実行していない場合は完了してください。
- まず File SDK アプリケーションの初期化に関するクイックスタート (C#)を完了して Visual Studio のスターター ソリューションを作成します。 "メール メッセージの .msg ファイルを処理する方法 (C#)" に関するこのクイックスタートは、先行するクイックスタートをベースにしています。
- メール ファイルの MIP SDK の概念を確認します。
- 省略可能: MIP SDK のファイル エンジンの概念を確認します。
- 省略可能: MIP SDK のファイル ハンドラーの概念を確認します。
enable_msg_file_type を設定し File SDK を使用して .msg ファイルのラベル付けを行う
File API アプリケーションの初期化についてのクイックスタートに続けて、ファイル エンジンの構築コードを変更して enable_msg_file_type flag
を設定した後、ファイル エンジンを使用して .msg ファイルのラベル付けを行います。
先行する "File SDK アプリケーションの初期化 (C#) に関するクイックスタート" で作成した Visual Studio ソリューションを開きます。
ソリューション エクスプローラーを使用して、
Main()
メソッドの実装が含まれるプロジェクトの .cs ファイルを開きます。 既定の名前は、それが含まれるプロジェクトと同じであり、プロジェクトの作成時に指定したものです。以前のクイックスタートから
Main()
関数の実装を削除します。Main()
の本体内に、次のコードを挿入します。 下のコード ブロックでは、ファイル エンジンの作成中にenable_msg_file_type
フラグが設定されています。その後、そのファイル エンジンを使用して作成されたIFileHandler
オブジェクトで .msg ファイルを処理することができます。static void Main(string[] args) { // Initialize Wrapper for File SDK operations. MIP.Initialize(MipComponent.File); // Create ApplicationInfo, setting the clientID from Azure AD App Registration as the ApplicationId. ApplicationInfo appInfo = new ApplicationInfo() { ApplicationId = clientId, ApplicationName = appName, ApplicationVersion = "1.0.0" }; // Instantiate the AuthDelegateImpl object, passing in AppInfo. AuthDelegateImplementation authDelegate = new AuthDelegateImplementation(appInfo); MipContext mipContext = MIP.CreateMipContext(appInfo,"mip_data",LogLevel.Trace,null,null); // Initialize and instantiate the File Profile. // Create the FileProfileSettings object. // Initialize file profile settings to create/use local state. var profileSettings = new FileProfileSettings(mipContext, CacheStorageType.OnDiskEncrypted, new ConsentDelegateImplementation()); // Load the Profile async and wait for the result. var fileProfile = Task.Run(async () => await MIP.LoadFileProfileAsync(profileSettings)).Result; // Create a FileEngineSettings object, then use that to add an engine to the profile. var customSettings = new List<KeyValuePair<string, string>>(); customSettings.Add(new KeyValuePair<string, string>("enable_msg_file_type", "true")); // Create a FileEngineSettings object, then use that to add an engine to the profile. var engineSettings = new FileEngineSettings("user1@tenant.com", authDelegate, "", "en-US"); engineSettings.Identity = new Identity("user1@tenant.com"); //set custom settings for the engine engineSettings.CustomSettings = customSettings; //Add fileEngine to profile var fileEngine = Task.Run(async () => await fileProfile.AddEngineAsync(engineSettings)).Result; //Set file paths string inputFilePath = "<input-file-path>"; //.msg file to be labeled string actualFilePath = inputFilePath; string outputFilePath = "<output-file-path>"; //labeled .msg file string actualOutputFilePath = outputFilePath; //Create a file handler for original file var fileHandler = Task.Run(async () => await fileEngine.CreateFileHandlerAsync(inputFilePath, actualFilePath, true)).Result; // List labels available to the user and use one of them to label the MSG file. foreach (var label in fileEngine.SensitivityLabels) { Console.WriteLine(string.Format("{0} - {1}", label.Name, label.Id)); if (label.Children.Count > 0) { foreach (Label child in label.Children) { Console.WriteLine(string.Format("\t{0} - {1}", child.Name, child.Id)); } } } string labelId = "<label-id>"; //label retrieved using file engine LabelingOptions labelingOptions = new LabelingOptions() { AssignmentMethod = options.AssignmentMethod }; fileHandler.SetLabel(labelId, labelingOptions, new ProtectionSettings()); // Commit changes, save as outputFilePath var result = Task.Run(async () => await fileHandler.CommitAsync(outputFilePath)).Result; // Create a new handler to read the labeled file metadata var handlerModified = Task.Run(async () => await fileEngine.CreateFileHandlerAsync(outputFilePath, actualOutputFilePath, true)).Result; Console.WriteLine(string.Format("Original file: {0}", inputFilePath)); Console.WriteLine(string.Format("Labeled file: {0}", outputFilePath)); Console.WriteLine(string.Format("Label applied to file: {0}", handlerModified.Label.Name)); Console.WriteLine("Press a key to continue."); Console.ReadKey(); // Application Shutdown fileHandler = null; handlerModified = null; fileEngine = null; fileProfile = null; mipContext = null; }
ファイル操作の詳細については、ファイル ハンドラーの概念に関する記事を参照してください。
次の値を使用して、ソース コードのプレースホルダー値を置き換えます。
プレースホルダー Value <input-file-path> テスト入力メッセージ ファイルの完全なパス (例: c:\\Test\\message.msg
)。<output-file-path> 出力ファイル、つまり入力ファイルのラベル付きコピーの完全なパス (例: c:\\Test\\message_labeled.msg
)。<label-id> ファイル エンジンを使用して取得される labelId (例: 667466bf-a01b-4b0a-8bbf-a79a3d96f720
)。
アプリケーションのビルドとテスト
F6 キー ([ソリューションのビルド]) を使用して、クライアント アプリケーションをビルドします。 ビルド エラーがない場合は、F5 キー ([デバッグの開始]) を使用してアプリケーションを実行します。
Original file: C:\Test.msg
Labeled file: C:\Test_Labeled.msg
Label applied to file: Confidential
Press a key to continue.