다음을 통해 공유


파일 SDK - 이메일 .msg 파일 처리(C#)

파일 SDK는 MSG 기능 플래그를 활성화하기 위해 애플리케이션이 필요하다는 점을 제외하고 다른 파일 형식과 동일한 방식으로 .msg 파일의 레이블 지정 작업을 지원합니다. 여기서는 이 플래그를 설정하는 방법을 볼 수 있습니다.

앞서 설명한 것처럼 IFileEngine의 인스턴스화에는 설정 개체 FileEngineSettings가 필요합니다. FileEngineSettings를 사용하여 애플리케이션이 특정 인스턴스에 대해 설정해야 하는 사용자 지정 설정에 대한 매개 변수를 전달할 수 있습니다. FileEngineSettingsCustomSettings 속성은 .msg 파일을 처리할 수 있도록 enable_msg_file_type에 대한 플래그를 설정하는 데 사용됩니다.

필수 조건

아직 완료하지 않은 경우 계속하기 전에 다음 필수 구성 요소를 완료해야 합니다.

enable_msg_file_type을 설정하고 .msg 파일에 레이블을 지정하기 위해 SDK 사용

파일 API 애플리케이션 초기화 빠른 시작을 계속 진행하려면 파일 엔진 구성 코드를 수정하여 enable_msg_file_type flag를 설정한 다음, 파일 엔진을 사용하여 .msg 파일에 레이블을 지정합니다.

  1. 이전 "빠른 시작: 파일 SDK 애플리케이션 초기화(C#)"에서 만든 Visual Studio 솔루션을 엽니다.

  2. 솔루션 탐색기를 사용하여 Main() 메서드 구현을 포함하는 프로젝트에서 .cs 파일을 엽니다. 기본값은 프로젝트 생성 중에 지정한 이름이 포함된 프로젝트와 동일한 이름입니다.

  3. 이전 빠른 시작에서 Main() 함수 구현을 제거합니다. Main() 본문 내부에 다음 코드를 삽입합니다. 아래 코드 블록에서 enable_msg_file_type 플래그는 파일 엔진 생성 중에 설정되며 .msg 파일은 파일 엔진을 사용하여 생성된 IFileHandler 개체에 의해 처리될 수 있습니다.

    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;
    }
    
    

    파일 작업에 대한 자세한 내용은 파일 처리기 개념을 참조하세요.

  4. 다음 값을 사용하여 소스 코드의 자리 표시자 값을 바꿉니다.

    자리 표시자
    <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.