2008-12-08 8 views
1

Je cherche à écrire un script de moniteur automatisé pour récupérer par programme les informations de la boîte de réception Exchange 2003 d'un autre utilisateur. J'ai du code C++ pour me connecter à MAPI et me connecter à ma propre boîte de réception. Je peux également utiliser l'applet Panneau de configuration-> Mail pour configurer la boîte aux lettres d'un autre utilisateur dans mon profil, et mon code peut y accéder. Cependant, cela a été fait sur mon bureau avec Outlook installé, ce qui fournit un éditeur de profil de messagerie plus riche.En utilisant MAPI avec C++, comment puis-je ouvrir la boîte de réception d'un autre utilisateur?

Comme cela fonctionnera sur un serveur, je préfèrerais ne pas installer Outlook du tout. Au lieu de cela, je peux installer le MAPI client. Je crée ensuite une application MAPI simple qui affiche l'assistant de profil de messagerie en utilisant MAPILogonEx() avec le drapeau MAPI_LOGON_UI. Toutefois, le client MAPI de base ne dispose pas des fonctionnalités pour configurer la boîte aux lettres d'un autre utilisateur. Comme une exigence, je ne peux exécuter ce script que le compte de service de l'application de surveillance, donc je ne peux pas lui dire d'exécuter en tant que compte dont je veux la boîte aux lettres.

Est-il encore possible de se connecter à la boîte aux lettres d'un autre utilisateur (en supposant que les autorisations sont déjà accordées) à l'aide du client MAPI de base? Ou est-il absolument nécessaire d'installer Outlook pour cette fonctionnalité?

Répondre

0

Avez-vous regardé ConfigureMsgService? Je crois que cela fonctionne avec Exchange MAPI, ou dites-vous que vous avez essayé et cela n'a pas fonctionné?

+0

Ce que je cherchais vraiment, c'était un moyen d'ajouter des boîtes aux lettres _additional_. Lorsque vous faites cela dans Outlook, MAPI les voit comme des entrées IMsgStore supplémentaires. Sans Outlook, comment cela peut-il être fait? – spoulson

1

Je vois ... je ne suis pas sûr de savoir comment le faire explicitement; C'est généralement un effet secondaire d'appeler CreateStoreEntryID avec les mauvais drapeaux. Ce que vous est cherchez à faire est probablement:

  1. obtenir un IID_IExchangeManageStore de votre message par défaut magasin
  2. Appel CreateStoreEntryID
  3. Ouvrez ensuite ce magasin par l'ID d'entrée

    LPEXCHANGEMANAGESTORE mapiObject = NULL; 
    
    store->QueryInterface(IID_IExchangeManageStore, (LPVOID *) &mapiObject); 
    
    mapiObject->CreateStoreEntryID(server, mailbox, OPENSTORE_TAKE_OWNERSHIP | 
        OPENSTORE_USE_ADMIN_PRIVILEGE, &len, &buffer); 
    
    //Call OpenEntry on the entry id 
    

Si vous voulez un exemple plus détaillé, recherchez la source du projet MAPI MFC pour CreateStoreEntryID. Si vous avez d'autres questions, le meilleur endroit pour les obtenir est le groupe de discussion microsoft.public.win32.programmer.messaging.

+0

Mes recherches sur le sujet sont en accord avec cette suggestion. Cependant, trouver les binaires et les en-têtes qui vous donnent IExchangeManageStore semble impossible; supprimé du téléchargement MS. Est-il toujours disponible partout? – spoulson

1

Je vous recommande fortement d'utiliser le client MAPI Microsoft Exchange (comme vous l'avez lié). Il est conçu pour être beaucoup plus robuste que la version Outlook de ces bibliothèques. Vous devriez trouver l'API non différente entre Outlook et Exchange Server par rapport à MAPI étendu. Vous devrez utiliser Extended MAPI (comme décrit par Cain T S Random) pour ouvrir d'autres magasins de messagerie, et bien sûr votre application devra être connectée en tant qu'utilisateur Windows avec les autorisations appropriées sur le serveur Exchange. IMsgServiceAdmin :: ConfigureMsgService va définir la boîte aux lettres pour le profil

Questions connexes