Postup vytvoření profilů MAPI bez instalace aplikace Outlook

Souhrn

Běžná mylná představa je, že klienta MAPI, jako je například aplikace Microsoft Outlook ani klienta Exchange, musí být nainstalována na pro Microsoft Exchange Server, vytvoření profilů MAPI. Instalace klienta MAPI z tohoto důvodu je zbytečné. Pro aplikaci Outlook nedoporučujeme instalaci klienta MAPI pro provozní servery. Jako podsystému MAPI je nainstalován, existují různé jiné způsoby vytvoření profilů MAPI. Podsystému MAPI serveru Exchange, je nainstalován.

Další informace

Způsoby vytvoření profilů MAPI

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen pouze na předpokládané záruky obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste obeznámeni s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou pomoci vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo vytvářet postupy podle vašich konkrétních požadavků.

Před provedením některé z těchto metod, bude nutné Ujistěte se, zda jsou správné položky provedené v souboru Mapisvc.inf na serveru.
Další informace o tom, jak upravit tento soubor, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

294470 jak přidat položky služby Exchange Mapisvc.inf

NewProf.exe použití

Nástroj NewProf.exe je dodávána s aplikací Outlook. Další informace o použití tohoto nástroje naleznete následujícím webu Microsoft Developer Network (MSDN):Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

Možnosti příkazového řádku Newprof.exe 145905

Popis 148664 popisovač souboru profilu

Použít ukázkový ProfMan2

Tento příklad používá rozhraní MAPI IProfAdmin, která je uvedena v části "Pomocí rozhraní MAPI IProfAdmin". Chcete-li získat tento vzorek, klepněte na následující číslo článku databáze Microsoft Knowledge Base:
228736 Profman2.exe - MAPI v2.0 Správce profilů

Použijte funkci MAPILogonEx

Při volání funkce MAPILogonEx bez určení profilu a nastavením MAPI_LOGON_UI příznak, MAPI zobrazí Průvodce vytvořením profilu, pokud žádné profily v počítači. Pokud existují profily, se zobrazí dialogové okno Zvolit profil MAPI. Klepněte na tlačítko Nový Chcete-li spustit Průvodce vytvořením profilu.
Ukázkový kód
// CreateProfileWithMAPILogonEx function: This takes advantage of the // profile prompt dialog's "New" button.
bool CreateProfileWithMAPILogonEx()
{
HRESULT hRes = S_OK; // Return code from MAPI calls.
LPMAPISESSION lpSession = NULL; // MAPI Session pointer.

// Initialize MAPI.
if (FAILED(hRes = MAPIInitialize(NULL)))
{
cout<<"Error initializing MAPI. hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;
}

// Instruct user to click the "New" button.
cout<<"When the \"Choose Profile\" dialog appears, click the \"New\" button"
<<"to configure a new profile."<<endl;

// Call MAPILogonEx to display the profile chooser dialog box.
if (FAILED(hRes = MAPILogonEx(NULL,
NULL,
NULL,
MAPI_LOGON_UI,
&lpSession)))
{
cout<<"Error logging on. hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;
}

// Log off the session.
if (FAILED(hRes = lpSession->Logoff(0,0,0)))
{
cout<<"Error logging off. hRes = 0x"<<hex<<hRes<<dec<<endl;
}

// Release the session.
lpSession->Release();

// Uninitialize MAPI.
MAPIUninitialize();

// true, which indicates success.
return TRUE;
}

Použijte funkci LAUNCHWIZARDENTRY

Tato funkce volá přímo Průvodce vytvořením profilu.
Ukázkový kód
// CreateProfileWithLAUNCHWIZARD function: This uses the LAUNCHWIZARDENTRY API// to display the profile configuration UI.
bool CreateProfileWithLAUNCHWIZARD()
{
HRESULT hRes = S_OK; // Return code from MAPI calls.
TCHAR szProfName[80] = {0}; // String to hold profile name.
LPTSTR szServices[] = {"MSEMS", NULL}; // String to hold message service names.

// Call LaunchWizard to add the MSEMS service.
if (FAILED(hRes = LaunchWizard(NULL,
NULL,
(LPCTSTR *)szServices,
80,
szProfName)))
{
cout<<"Error launching wizard. hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;
}

// Return true indicating success.
return TRUE;
}

Pomocí rozhraní MAPI IProfAdmin

Toto rozhraní MAPI umožňuje programové vytvoření profilu bez zásahu uživatele.
Ukázkový kód
// CreateProfileWithIProfAdmin function: This uses the MAPI IProfAdmin to // programmatically create a profile. No UI is displayed.
bool CreateProfileWithIProfAdmin()
{
HRESULT hRes = S_OK; // Result from MAPI calls.
LPPROFADMIN lpProfAdmin = NULL; // Profile Admin object.
LPSERVICEADMIN lpSvcAdmin = NULL; // Service Admin object.
LPMAPITABLE lpMsgSvcTable = NULL; // Table to hold services.
LPSRowSet lpSvcRows = NULL; // Rowset to hold results of table query.
SPropValue rgval[2]; // Property structure to hold values we want to set.
SRestriction sres; // Restriction structure.
SPropValue SvcProps; // Property structure for restriction.
char szProfile[80] = {0}; // String for profile name.
char szMailbox[80] = {0}; // String for mailbox name.
char szServer[80] = {0}; // String for server name.

// This indicates columns we want returned from HrQueryAllRows.
enum {iSvcName, iSvcUID, cptaSvc};
SizedSPropTagArray(cptaSvc,sptCols) = { cptaSvc, PR_SERVICE_NAME, PR_SERVICE_UID };

// Get configuration info from user.
cout<<"Enter name for profile: ";
cin>>szProfile;
cout<<"Enter Exchange mailbox name: ";
cin>>szMailbox;
cout<<"Enter Exchange server name: ";
cin>>szServer;

// Initialize MAPI.

if (FAILED(hRes = MAPIInitialize(NULL)))
{
cout<<"Error initializing MAPI.";
goto error;
}

// Get an IProfAdmin interface.

if (FAILED(hRes = MAPIAdminProfiles(0, // Flags.
&lpProfAdmin))) // Pointer to new IProfAdmin.
{
cout<<"Error getting IProfAdmin interface.";
goto error;
}

// Create a new profile.

if (FAILED(hRes = lpProfAdmin->CreateProfile(szProfile, // Name of new profile.
NULL, // Password for profile.
NULL, // Handle to parent window.
NULL))) // Flags.
{
cout<<"Error creating profile.";
goto error;
}

// Get an IMsgServiceAdmin interface off of the IProfAdmin interface.

if (FAILED(hRes = lpProfAdmin->AdminServices(szProfile, // Profile that we want to modify.
NULL, // Password for that profile.
NULL, // Handle to parent window.
0, // Flags.
&lpSvcAdmin))) // Pointer to new IMsgServiceAdmin.
{
cout<<"Error getting IMsgServiceAdmin interface.";
goto error;
}

// Create the new message service for Exchange.

if (FAILED(hRes = lpSvcAdmin->CreateMsgService("MSEMS", // Name of service from MAPISVC.INF.
NULL, // Display name of service.
NULL, // Handle to parent window.
NULL))) // Flags.
{
cout<<"Error creating Exchange message service.";
goto error;
}

// You now have to obtain the entry id for the new service.
// You can do this by getting the message service table
// and getting the entry that corresponds to the new service.

if (FAILED(hRes = lpSvcAdmin->GetMsgServiceTable(0, // Flags.
&lpMsgSvcTable))) // Pointer to table.
{
cout<<"Error getting Message Service Table.";
goto error;
}

// Set up restriction to query table.

sres.rt = RES_CONTENT;
sres.res.resContent.ulFuzzyLevel = FL_FULLSTRING;
sres.res.resContent.ulPropTag = PR_SERVICE_NAME;
sres.res.resContent.lpProp = &SvcProps;

SvcProps.ulPropTag = PR_SERVICE_NAME;
SvcProps.Value.lpszA = "MSEMS";

// Query the table to obtain the entry for the newly created message service.

if (FAILED(hRes = HrQueryAllRows(lpMsgSvcTable,
(LPSPropTagArray)&sptCols,
&sres,
NULL,
0,
&lpSvcRows)))
{
cout<<"Error querying table for new message service.";
goto error;
}

// Set up a SPropValue array for the properties that you have to configure.

// First, the server name.
ZeroMemory(&rgval[1], sizeof(SPropValue) );
rgval[1].ulPropTag = PR_PROFILE_UNRESOLVED_SERVER;
rgval[1].Value.lpszA = szServer;

// Next, the mailbox name.
ZeroMemory(&rgval[0], sizeof(SPropValue) );
rgval[0].ulPropTag = PR_PROFILE_UNRESOLVED_NAME;
rgval[0].Value.lpszA = szMailbox;

// Configure the message service by using the previous properties.

if (FAILED(hRes = lpSvcAdmin->ConfigureMsgService(
(LPMAPIUID)lpSvcRows->aRow->lpProps[iSvcUID].Value.bin.lpb, // Entry ID of service to configure.
NULL, // Handle to parent window.
0, // Flags.
2, // Number of properties we are setting.
rgval))) // Pointer to SPropValue array.
{
cout<<"Error configuring message service.";
goto error;
}

goto cleanup;

error:
cout<<" hRes = 0x"<<hex<<hRes<<dec<<endl;
return FALSE;

cleanup:
// Clean up.
if (lpSvcRows) FreeProws(lpSvcRows);
if (lpMsgSvcTable) lpMsgSvcTable->Release();
if (lpSvcAdmin) lpSvcAdmin->Release();
if (lpProfAdmin) lpProfAdmin->Release();

MAPIUninitialize();
return TRUE;

}

Ukázka

Následující soubor je k dispozici pro stažení z Microsoft Download Center:
Datum vydání: 22. října 2001

Pro více informací o tom, jak stahovat soubory podpory společnosti Microsoft, klepněte na následující číslo článku v databázi Microsoft Knowledge Base:
119591 jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft zkontroloval tento soubor na přítomnost virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici k datu, kdy byl soubor vydán. Soubor je uložen na zabezpečených serverech, které pomáhají zabránit neoprávněným změnám v souboru.
Profiler.exe je jednoduchý příklad Microsoft Visual C++, který znázorňuje metody 3 až 5 výše. Soubor Profiler.exe obsahuje následující soubory:

Název souboruVelikost
Profiler.dsw1 KB
Profiler.dsp5 KB
Profiler.cpp12 KB
Vlastnosti

ID článku: 306962 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor