Come creare profili MAPI senza installare Outlook

Riepilogo

Un diffuso è che un client MAPI, come Microsoft Outlook o il Client di Exchange, deve essere installato una di Microsoft Exchange Server per creare profili MAPI. Installazione di un client MAPI per questo motivo non è necessaria. Per Outlook, si consiglia di non installare un client MAPI per i server di produzione. Se è installato un sottosistema MAPI, diversi altri modi disponibili per creare profili MAPI. In Exchange è installato un sottosistema MAPI.

Ulteriori informazioni

Metodi di creazione di profili MAPI

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Ciò include, ma non limitato a, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che si abbia familiarità con il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire la procedura di debug. I tecnici del supporto Microsoft possono spiegare la funzionalità di una particolare procedura, ma in nessun caso possono modificare questi esempi per fornire funzionalità aggiuntive o creare procedure atte a soddisfare specifiche esigenze.

Prima di provare uno di questi metodi, è necessario assicurarsi che nel file Mapisvc. inf sul server siano inserite le voci corrette.
Per ulteriori informazioni su come modificare questo file, fare clic sul numero seguente per visualizzare l'articolo della Microsoft Knowledge Base:

Come aggiungere voci per i servizi di Exchange a Mapisvc. inf 294470

Utilizzare NewProf.exe

L'utilità di NewProf.exe viene fornito con Outlook. Per ulteriori informazioni sull'utilizzo di questa utilità, visitare il seguente sito Web Microsoft Developer Network (MSDN):Per ulteriori informazioni, fare clic sui numeri per visualizzare gli articoli della Microsoft Knowledge Base:

Opzioni della riga di comando di 145905 Newprof.exe

Descrizione 148664 del File descrizione profilo

Utilizzare l'esempio ProfMan2

In questo esempio utilizza l'interfaccia MAPI IProfAdmin menzionato nella sezione "Utilizzare l'interfaccia MAPI IProfAdmin". Per ottenere in questo esempio, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
228736 Profman2.exe - MAPI versione 2.0 di gestione profili

Utilizzare la funzione MAPILogonEx

Quando si chiama la funzione MAPILogonEx senza specificare un profilo e impostando il flag MAPI_LOGON_UI impostato, se nessun profilo presenti nel computer viene visualizzata la creazione guidata profilo. Se sono disponibili profili, viene visualizzata la finestra di dialogo Scegli profilo . Fare clic su Nuovo per avviare la creazione guidata profilo.
Codice di esempio
// 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;
}

Utilizzare la funzione LAUNCHWIZARDENTRY

Questa funzione chiama direttamente la creazione guidata profilo.
Codice di esempio
// 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;
}

Utilizzare l'interfaccia MAPI IProfAdmin

Questa interfaccia MAPI consente di creare automaticamente un profilo senza interazione dell'utente.
Codice di esempio
// 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;

}

Esempio

Il seguente file è disponibile per il download da Microsoft Download Center:
Data di rilascio: 22 ottobre 2001

Per ulteriori informazioni su come scaricare i file di supporto Microsoft, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
119591 come ottenere file di supporto Microsoft dai servizi online
Microsoft ha analizzato questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus più recente disponibile alla data in cui il file è stato registrato. Il file è archiviato in un server con protezione avanzata che impedisce modifiche non autorizzate al file.
Profiler.exe è un semplice esempio di Microsoft Visual C++ che illustra i metodi da 3 a 5. Il file Profiler.exe contiene i seguenti file:

Nome del fileDimensioni
Profiler.dsw1 KB
Profiler.dsp5 KB
Profiler.cpp12 KB
Proprietà

ID articolo: 306962 - Ultima revisione: 30 gen 2017 - Revisione: 2

Feedback