文件 SDK 支持以与任何其他文件类型相同的方式对.msg文件的标记操作,但 SDK 需要应用程序才能启用 MSG 功能标志。 本快速入门演示如何设置此标志。
如前所述,实例化 IFileEngine 需要 FileEngineSettings 设置对象。 应用程序用于 FileEngineSettings 传递特定实例的自定义设置。
FileEngineSettings 的 CustomSettings 属性将 enable_msg_file_type 标志设置为启用对 .msg 文件的处理。
Prerequisites
如果尚未完成,请确保先完成以下先决条件,然后再继续:
- 请先完成快速入门:文件 SDK 应用程序初始化 (C#),该过程将构建一个初始 Visual Studio 解决方案。 本“如何 - 处理电子邮件.msg文件(C#)”快速入门基于上一个文件。
- 查看电子邮件文件 MIP SDK 概念。
- (可选)查看 MIP SDK 概念中的文件引擎 。
- (可选):查看 MIP SDK 概念中的文件处理程序 。
设置 enable_msg_file_type,并使用 File SDK 对 .msg 文件进行标签设置
延续“文件 API 应用程序初始化快速入门”中的内容,修改文件引擎的构造代码以设置enable_msg_file_type flag,然后使用文件引擎为 .msg 文件添加标签。
打开在上一篇“快速入门:文件 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); MipConfiguration mipConfiguration = new MipConfiguration(appInfo, "mip_data", LogLevel.Trace, false, CacheStorageType.OnDiskEncrypted); MipContext mipContext = MIP.CreateMipContext(mipConfiguration); // 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 = AssignmentMethod.Standard }; Label label = fileEngine.GetLabelById(labelId); fileHandler.SetLabel(label, 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.Label.Name)); Console.WriteLine("Press a key to continue."); Console.ReadKey(); // Application Shutdown fileHandler = null; handlerModified = null; fileEngine = null; fileProfile = null; mipContext = null; }有关文件操作的详细信息,请参阅 文件处理程序概念。
将源代码中的占位符值替换为以下值:
Placeholder Value <输入文件路径> 测试输入消息文件的完整路径,例如: c:\\Test\\message.msg<输出文件路径> 输出文件的完整路径,这是输入文件的标记副本,例如: c:\\Test\\message_labeled.msg<标签-ID> 使用文件引擎检索的标签 ID,例如: 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.