2

特定のインフォメーションストア内のすべてのメールボックスを開くためのサンプルコードが記載されたMicrosoftナレッジベースの記事があります。これまでのところ機能します(VC ++ 6.0より新しいコンパイラで少しコピー&ペーストする必要があります)。

ある時点で、インフォメーションストアの識別名を使用してIExchangeManageStore::GetMailboxTableを呼び出します。Exchange 2007トライアル仮想サーバーイメージの場合、次のようになります。

"/o=Litware Inc/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=servers/cn=DC1".

OutlookSpyを使用し、IMsgStoreとIExchangeManageStoreをクリックすると、「サーバーDN:」の横に目的の文字列が表示されます。

ユーザーにこれを設定ファイルに入れるように強制するのは避けたいです。では、OutlookSpyでそれができる場合、アプリケーションは、現在開いているメールボックスが存在するインフォメーションストアの識別名をどのように見つけることができますか?

4

3 に答える 3

2

純粋な MAPI ソリューションが必要だと考えて、OutlookSpy がそれをどのように行うかを理解したと思います。


の後に挿入された次のコード スニペット

printf("Created MAPI session\n");

KB194627の例では、サーバー DNが表示されます。

LPPROFSECT lpProfSect;
hr = lpSess->OpenProfileSection((LPMAPIUID)pbGlobalProfileSectionGuid, NULL, 0, &lpProfSect);
if(SUCCEEDED(hr))
{
    LPSPropValue lpPropValue;
    hr = HrGetOneProp(lpProfSect, PR_PROFILE_HOME_SERVER_DN, &lpPropValue);
    if(SUCCEEDED(hr))
    {
        printf("Server DN: %s\n", lpPropValue->Value.lpszA);
        MAPIFreeBuffer(lpPropValue);
    }
    lpProfSect->Release();
}



更新: EDK 5.5 ソース コード
は関数HrGetServerDNがあり、特定のセッションのPR_EMS_AB_HOME_MTAからサーバー DNを抽出します。他の方法が信頼できないことが判明した場合は、試してみます。

于 2008-09-18T08:36:36.220 に答える
0

Active Directory にあるので、ADSI/LDAP を使用して CN=Microsoft Exchange,CN=Services,CN=Configuration,DC= example ,DC= comを調べます。Sysinternals の ADExplorer を使用して、そこを掘り下げて、探している値を見つけます。

于 2008-09-17T12:02:38.153 に答える
0

MFCMapi のソースをダウンロードして、その方法を確認します。

于 2008-12-30T14:50:49.627 に答える