IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#][1.1] Comment accéder à Exchange ?


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 68
    Points : 80
    Points
    80
    Par défaut [C#][1.1] Comment accéder à Exchange ?
    Bonjour tout le monde,

    Voilà j'ai un souci, je souhaiterais depuis une application ASP.NET pouvoir accéder à une boîte aux lettres d'un serveur Exchange. Mais la particularité c'est que ça peut-être pour n'importe quel compte (et pas seulement celui associé au profil connecté qu'utilise IIS).

    Donc je me suis dis qu'il fallait dans un premier temps usurper le profil Windows avant de se connecter à Exchange.

    J'ai donc fait cette classe pour usurper mon profil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    using System;
     
    using System.Runtime.InteropServices; // DllImport
    using System.Security.Principal; // WindowsImpersonationContext
    using System.Security.Permissions; // PermissionSetAttribute
     
    	public class Impersonation
    	{
     
    		public const int LOGON32_LOGON_INTERACTIVE = 2;
    		public const int LOGON32_PROVIDER_DEFAULT = 0;
     
    		WindowsImpersonationContext impersonationContext;
     
    		[DllImport("advapi32.dll", CharSet=CharSet.Auto)]
    		public static extern int LogonUser(String lpszUserName,
    			String lpszDomain,
    			String lpszPassword,
    			int dwLogonType,
    			int dwLogonProvider,
    			ref IntPtr phToken);
     
    		[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
    		public extern static int DuplicateToken(IntPtr hToken,
    			int impersonationLevel,
    			ref IntPtr hNewToken);
     
    		public Impersonation()
    		{
    		}
     
    		public bool impersonateValidUser(String userName, String domain, String password)
    		{
    			WindowsIdentity tempWindowsIdentity;
    			IntPtr token = IntPtr.Zero;
    			IntPtr tokenDuplicate = IntPtr.Zero;
     
    			if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
    				LOGON32_PROVIDER_DEFAULT, ref token) != 0)
    			{
    				if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
    				{
    					tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
    					impersonationContext = tempWindowsIdentity.Impersonate();
     
    					if (impersonationContext != null)
    						return true;
    					else
    						return false;
    				}
    				else
    					return false;
    			}
    			else
    				return false;
    		}
     
    		public void undoImpersonation()
    		{
    			impersonationContext.Undo();
    		}
    	}
    et après j'utilise CDO pour la connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Impersonation oImperso		= new Impersonation();
     
    objSession = new MAPI.SessionClass();
     
    objSession.Logon("monDomaine\\compteUsurpé", "motdepasse", false, true, 0, true, "serveurExchange" + (char)10 + "nomDuCompteExchange");
     
    oImperso.impersonateValidUser("compteUsurpé", "domaine", "motdepasse");
     
    try
    {
      MAPI.Folder oFolder = (MAPI.Folder)objSession.Inbox;
      //...
    }
    finally
    {
      oImperso.undoImpersonation();
    }
    Et mon problème c'est que ça plante sur le objSession en me sortant une erreur MAPI_E_NOT_FOUND.

    Est-ce qu'il arrive à usurper totalement le profil utilisateur ? ou cela vient-il d'autre chose ?

    Une idée ??

    J'ai fait le tour du Ouaibe rien trouvé pour m'aider ... Si quelqu'un à une idée.. ou une autre solution pour contourner le problème.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    Bon c'est bon j'ai finalement résolu le problème après moultes essais et arrachage de cheveux !!!

    Donc ma manip : installation sur le serveur iis de l'adminpak.msi et des outils de gestion du système de Microsoft Exchange.

    Enfin j'usurpe avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    oImperso.impersonateValidUser("compteUsurpé", "domaine", "motdepasse");
     
    objSession.Logon("", "", false, true, 0, true, "serveurExchange" + (char)10 + "nomDuCompteExchange");
    sans préciser compte et mot de passe dans le logon (mode quasi normal quoi).

    Voilà si ça peut aider quelqu'un...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. COMMENT accès en lecture seul aux logs sqlserver 2008
    Par Rafter dans le forum Administration
    Réponses: 4
    Dernier message: 15/07/2013, 23h58
  2. [Exchange 2007] comment se connect outlook sur exchange en exterieur
    Par neuneu1 dans le forum Exchange Server
    Réponses: 0
    Dernier message: 20/04/2011, 18h43
  3. Réponses: 0
    Dernier message: 06/09/2010, 18h55
  4. Réponses: 2
    Dernier message: 24/09/2005, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo