Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fil-SDK stöder etiketteringsåtgärder för .msg filer på samma sätt som andra filtyper, förutom att SDK:t behöver programmet för att aktivera MSG-funktionsflaggan. Den här snabbstartsguiden visar hur du ställer in den här flaggan.
Som tidigare nämnts kräver instansiering mip::FileEngine inställningsobjektet mip::FileEngineSettings . Programmet använder FileEngineSettings för att skicka anpassade inställningar för en viss instans. Egenskapen CustomSettings för mip::FileEngineSettings ställer in enable_msg_file_type-flaggan för att aktivera bearbetning av .msg-filer.
Förutsättningar
Om du inte redan har gjort det måste du slutföra följande krav innan du fortsätter:
- Slutför snabbstart: Fil-SDK-programinitiering (C++) först, vilket skapar en visual studio-startlösning. Den här snabbstarten "How to – process email .msg files (C++)" bygger på den föregående.
- Granska Snabbstart: lista känslighetsetiketter (C++).
- Granska snabbstart: Ange/hämta känslighetsetiketter (C++).
- Granska MIP SDK-begrepp för E-postfiler .
- Valfritt: Granska koncepten för filmotorer i MIP SDK.
- Alternativt: Översikt av filhanterare och begreppen i MIP SDK.
Nödvändiga implementeringssteg
Öppna Visual Studio-lösningen som du skapade i föregående artikel "Snabbstart: Initiering av klientprogram (C++)."
Skapa ett PowerShell-skript för att generera åtkomsttoken, enligt beskrivningen i Snabbstart: Lista känslighetsetiketter (C++).
Implementera en observatörsklass för att övervaka
mip::FileHandler, enligt beskrivningen i Snabbstart: Ange/hämta känslighetsetiketter (C++).
Ange enable_msg_file_type och använd File SDK för att märka .msg fil
Lägg till följande konstruktionskod för filmotorn för att ställa in flaggan enable_msg_file_type och använda filmotorn för att märka en .msg-fil.
I Prieskumník riešení öppnar du filen .cpp i projektet som innehåller implementeringen av
main()metoden. Det är som standard samma namn som det projekt som innehåller det, som du angav när projektet skapades.Lägg till följande #include- och using-direktiv efter de motsvarande befintliga direktiven, överst i filen:
#include "filehandler_observer.h" #include "mip/file/file_handler.h" #include <iostream> using mip::FileHandler; using std::endl;Ta bort implementeringen av
main()funktionen från föregående snabbstart. Infoga följande kod i brödtextenmain(). I följande kodblock anger skapande av filmotor flagganenable_msg_file_type.mip::FileHandlerobjekt som har skapats med hjälp av filmotorn kan sedan bearbeta en .msg-fil.
int main()
{
// Construct/initialize objects required by the application's profile object
ApplicationInfo appInfo { "<application-id>", // ApplicationInfo object (App ID, name, version)
"<application-name>",
"1.0"
};
std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(appInfo,
"mip_data",
mip::LogLevel::Trace,
false,
mip::CacheStorageType::OnDisk);
std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);
auto profileObserver = make_shared<ProfileObserver>(); // Observer object
auto authDelegateImpl = make_shared<AuthDelegateImpl>("<application-id>"); // Authentication delegate object (App ID)
auto consentDelegateImpl = make_shared<ConsentDelegateImpl>(); // Consent delegate object
// Construct/initialize profile object
FileProfile::Settings profileSettings(mMipContext, mip::CacheStorageType::OnDisk,
consentDelegateImpl, profileObserver);
// Set up promise/future connection for async profile operations; load profile asynchronously
auto profilePromise = make_shared<promise<shared_ptr<FileProfile>>>();
auto profileFuture = profilePromise->get_future();
try
{
mip::FileProfile::LoadAsync(profileSettings, profilePromise);
}
catch (const std::exception& e)
{
std::cout << "An exception occurred. Are the Settings and ApplicationInfo objects populated correctly?\n\n"<< e.what() << "'\n";
system("pause");
return 1;
}
auto profile = profileFuture.get();
// Construct/initialize engine object
FileEngine::Settings engineSettings(
mip::Identity("<engine-account>"), // Engine identity (account used for authentication)
authDelegateImpl, // Token acquisition implementation
"<engine-state>", // User-defined engine state
"en-US"); // Locale (default = en-US)
//Set enable_msg_file_type flag as true
std::vector<std::pair<string, string>> customSettings;
customSettings.emplace_back(mip::GetCustomSettingEnableMsgFileType(), "true");
engineSettings.SetCustomSettings(customSettings);
// Set up promise/future connection for async engine operations; add engine to profile asynchronously
auto enginePromise = make_shared<promise<shared_ptr<FileEngine>>>();
auto engineFuture = enginePromise->get_future();
profile->AddEngineAsync(engineSettings, enginePromise);
std::shared_ptr<FileEngine> engine;
try
{
engine = engineFuture.get();
}
catch (const std::exception& e)
{
cout << "An exception occurred... is the access token incorrect/expired?\n\n"<< e.what() << "'\n";
system("pause");
return 1;
}
//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
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>();
auto handlerFuture = handlerPromise->get_future();
engine->CreateFileHandlerAsync(inputFilePath,
actualFilePath,
true,
std::make_shared<FileHandlerObserver>(),
handlerPromise);
auto fileHandler = handlerFuture.get();
//List labels available to the user
// Use mip::FileEngine to list all labels
auto labels = engine->ListSensitivityLabels();
// Iterate through each label, first listing details
for (const auto& label : labels) {
cout << label->GetName() << " : " << label->GetId() << endl;
// get all children for mip::Label and list details
for (const auto& child : label->GetChildren()) {
cout << "-> " << child->GetName() << " : " << child->GetId() << endl;
}
}
string labelId = "<labelId-id>"; //set a label ID to use
// Labeling requires a mip::LabelingOptions object.
// Review API ref for more details. The sample implies that the file was labeled manually by a user.
mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);
// Resolve the label ID to a mip::Label, then apply it.
auto label = engine->GetLabelById(labelId);
fileHandler->SetLabel(label, labelingOptions, mip::ProtectionSettings());
// Commit changes, save as outputFilePath
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
if(fileHandler->IsModified())
{
fileHandler->CommitAsync(outputFilePath, commitPromise);
}
if (commitFuture.get()) {
cout << "\n Label applied to file: " << outputFilePath << endl;
}
else {
cout << "Failed to label: " + outputFilePath << endl;
return 1;
}
// Create a new handler to read the label
auto msgHandlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>();
auto msgHandlerFuture = msgHandlerPromise->get_future();
engine->CreateFileHandlerAsync(inputFilePath,
actualFilePath,
true,
std::make_shared<FileHandlerObserver>(),
msgHandlerPromise);
auto msgFileHandler = msgHandlerFuture.get();
cout << "Original file: " << inputFilePath << endl;
cout << "Labeled file: " << outputFilePath << endl;
cout << "Label applied to file : "
<< msgFileHandler->GetLabel()->GetLabel()->GetName()
<< endl;
// Application shutdown. Null out profile, engine, handler.
// Application may crash at shutdown if resources aren't properly released.
msgFileHandler = nullptr;
fileHandler = nullptr;
engine = nullptr;
profile = nullptr;
mMipContext->ShutDown();
mMipContext = nullptr;
return 0;
}
Mer information om filåtgärder finns i Filhanterarbegrepp.
Ersätt platshållarvärdena i källkoden med följande värden:
Platshållare Värde <application-id> Program-ID som registrerats i Microsoft Entra-klientorganisationen, till exempel: 00001111-aaaa-2222-bbbb-3333cccc4444.<motorkonto> Det konto som används för motoridentiteten, till exempel: user@tenant.onmicrosoft.com.<motortillstånd> Användardefinierat programtillstånd, till exempel: My engine state.<inmatningsfil-sökväg> Den fullständiga sökvägen till en testinmatningsmeddelandefil, till exempel: c:\\Test\\message.msg.<utdatafilssökväg> Den fullständiga sökvägen till utdatafilen, som är en märkt kopia av indatafilen, till exempel: c:\\Test\\message_labeled.msg.<etikett-ID> Etikett-ID som hämtas med hjälp av ListSensitivityLabels, som till exempel:667466bf-a01b-4b0a-8bbf-a79a3d96f720.
Skapa och testa programmet
Använd F6 (Build Solution) för att skapa klientprogrammet. Om du inte har byggfel använder du F5 (Starta felsökning) för att köra programmet.