Comment connaître le nom distinctif de la banque d'informations à alimenter pour IExchangeManageStore :: GetMailboxTable?

StackOverflow https://stackoverflow.com/questions/80831

Question

Il existe un article de la base de connaissances Microsoft avec un exemple de code permettant d'ouvrir toutes les boîtes aux lettres d'un donné la banque d'informations. Cela fonctionne jusqu'à présent (nécessite un peu de copier & coller sur des compilateurs plus récents que VC ++ 6.0).

À un moment donné, il appelle IExchangeManageStore :: GetMailboxTable avec le nom distinctif de la banque d'informations. Pour l'image Exchange 2007 Trial Virtual Server, elle doit ressembler à ceci:

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

L'utilisation de OutlookSpy , puis un clic sur IMsgStore et IExchangeManageStore révèlent la chaîne souhaitée en regard de " DN serveur. : ".

Je veux éviter de forcer l'utilisateur à mettre cela dans un fichier de configuration. Par conséquent, si OutlookSpy peut le faire, comment mon application peut-elle connaître le nom distinctif de la banque d’informations sur laquelle se trouve la boîte aux lettres actuellement ouverte?

Était-ce utile?

La solution

Pensant qu’il doit exister une solution MAPI pure, j’ai bien compris comment OutlookSpy le fait.


L'extrait de code suivant, inséré après

printf("Created MAPI session\n");

dans l'exemple de KB194627 , affichera le nom distinctif du serveur .

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();
}



Mise à jour
Il existe la fonction HrGetServerDN dans Code source EDK 5.5 , il extrait le nom distinctif du serveur à partir de la session PR_EMS_AB_HOME_MTA d'une session donnée. Je vais essayer si l'inverse s'avère peu fiable.

Autres conseils

Ce sera dans Active Directory, vous utiliserez donc ADSI / LDAP pour consulter CN = Microsoft Exchange, CN = Services, CN = Configuration, DC = exemple , DC = com . Utilisez ADExplorer de Sysinternals pour vous y retrouver et trouver la valeur que vous recherchez.

Je téléchargerais le code source de MFCMapi pour voir comment il procède.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top