Outlook をインストールせずに MAPI プロファイルを作成する方法

概要

MAPI プロファイルを作成するには Microsoft Exchange Server に Microsoft Outlook や Exchange クライアントなどの MAPI クライアントをインストールする必要があると誤解されることがよくありますが、MAPI プロファイルを作成するために MAPI クライアントをインストールする必要はありません。Outlook の場合は、MAPI クライアントを運用サーバー用にインストールすることは推奨されていません。MAPI サブシステムがインストールされていれば、他のさまざまな方法を使用して MAPI プロファイルを作成できます。Exchange には、MAPI サブシステムがインストールされています。

詳細

MAPI プロファイルの作成方法

マイクロソフトは、この情報をプログラミング言語の使用方法の一例として提供するだけであり、市場性および特定目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。この資料は、例示されているプログラミング言語やプロシージャの作成およびデバッグに使用するツールについて理解されているユーザーを対象としています。Microsoft Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。


この資料に記載されている方法を試す前に、サーバーの Mapisvc.inf ファイルの入力内容が適切であることを確認する必要があります。
このファイルを変更する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

294470 Mapisvc.inf に Exchange サービスのエントリを追加する方法

NewProf.exe を使用する

NewProf.exe ユーティリティは Outlook に含まれています。このユーティリティの使用方法については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

145905 [XCLN]NEWPROF.EXE のオプションについて
148664 [XADM]Exchange クライアントの Profile Descriptor File(*.PRF)について

ProfMan2 サンプルを使用する

このサンプルでは、「MAPI IProfAdmin インターフェイスを使用する」に記載されている MAPI IProfAdmin インターフェイスを使用します。このサンプルを入手するには、次の「サポート技術情報」 (Microsoft Knowledge Base) を参照してください。
228736 [SAMPLE] Profman2.exe - MAPI Profile Manager v2.0

MAPILogonEx 関数を使用する

プロファイルを指定せず、MAPI_LOGON_UI フラグを設定した状態で MAPILogonEx 関数を呼び出すと、コンピュータ上にプロファイルが存在しない場合は、プロファイル作成ウィザードが表示されます。プロファイルが存在する場合は、[プロファイルの選択] ダイアログ ボックスが表示されます。[新規作成] をクリックしてプロファイル作成ウィザードを起動します。
サンプル コード
// 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;
}

LAUNCHWIZARDENTRY 関数を使用する

この関数ではプロファイル作成用のウィザードが直接呼び出されます。
サンプル コード
// 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;
}

MAPI IProfAdmin インターフェイスを使用する

この MAPI インターフェイスでは、ユーザーによる操作なしで、プログラムを使用してプロファイルを作成できます。
サンプル コード
// 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;

}

サンプル

下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。

リリース日 : 2001 年 10 月 22 日


マイクロソフトのサポート ファイルのダウンロード方法を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用して、配布ファイルのウイルス チェックを行っています。配布ファイルはセキュリティで保護されたサーバー上に置かれており、権限のない第三者が無断でファイルを変更できないようになっています。
Profiler.exe は、上記の方法 3. ~ 5. を説明するための簡単な Microsoft Visual C++ サンプルです。Profiler.exe ファイルには、以下のファイルが含まれています。


ファイル名
サイズ
Profiler.dsw
1 KB
Profiler.dsp
5 KB
Profiler.cpp
12 KB
プロパティ

文書番号:306962 - 最終更新日: 2007/11/25 - リビジョン: 1

フィードバック