Auteur de questions
CDOEXM CreateMailbox Accès Refusé !

Question
-
<p>Bonjour, je suis en train de développer une appli gérant des utilisateurs d'un AD ainsi que leur boite mail sur Exchange.</p><p>Je cherche à créer une boite mail pour un utilisateur existant. J'utilise la méthode CreateMailbox. Celle ci me génère une exception : Accès Refusé</p><br><p><br></p><p>Je travail sur un ordinateur distant du domaine où est connecté le serveur Exchange ainsi que l'AD. Est il possible de se connecter à distance au domaine afin de créer des boites mail ??</p><br><p><br></p><p>Merci</p><br><p><br></p><p>Guillaume</p><br><p><br></p><p>PS : Voir code ci dessous<br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p><p> Try<br> Dim homeMDB As String = MyHomeMDB<br> Dim MailBox As CDOEXM.IMailboxStore<br><br> 'This creates the new user in the "users" container.<br> Console.WriteLine("Connexion à l'AD")<br> Dim User As New DirectoryEntry("LDAP://domaine/CN=EssaiEx,OU=test", "Administrator", "Hosteam")<br> Console.WriteLine("Le user choisi est : " + User.Name)<br><br> Console.WriteLine("Copie des données du User vers la boite")<br> MailBox = User.NativeObject<br><br> Console.WriteLine("Création de la boite mail")<br> MailBox.CreateMailbox(homeMDB)'Exception !!<br><br> 'Obtain the IMailboxStore interface, create the mailbox, and commit the changes.<br> User.CommitChanges()<br> Catch ex As Exception<br> Console.WriteLine("Erreur dans la Création de la boite mail !" + ex.Message)<br> End Try</p><br><br><br><br><br><br><br>
- Déplacé Tagore Bandlamudi jeudi 4 février 2010 05:44 Forums Consolidation (Origine :Exchange 2000/2003)
Toutes les réponses
-
Bonsoir,
votre message est difficilement lisible ! j'ai cru deviner ceci...
Plutôt qu'utiliser la méthode "createMailbox" qui ne fonctionne QUE sur un serveur Exchange 2000/2003, il préférable d'utiliser une méthode ne faisant appel qu'à Active Directory (et LDAP).
=> ceci aura l'avantage de fonctionner aussi sur Exchange 2007 à partir d'une simple station.
Voici un extrait d'un de mes programmes sur le sujet. Regarde avec ADSIEDIT.MSC le format exact de chaque champ (HomeMdb, HomeMTA,...)
oUser.put "HomeMdb", DistinguishedNameBanquePrive
oUser.put "HomeMTA", DistinguishedNameHomeMta
oUser.put "msExchHomeServerName", ExchangeHomeServer
' oUser.put "mail", AdresseEmailoUser.put "mailnickname", Alias
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGuid = Replace(TypeLib.Guid, "-", "")
NewGuid = Mid(NewGuid, 2, Len(NewGuid) - 4)
' MsgBox (NewGuid)
j = 0
ReDim tmp(j)
For i = 1 To Len(NewGuid) Step 2
s = UCase(Mid(NewGuid, i, 2))
car = converthexa(s)
ReDim Preserve tmp(j)
tmp(j) = car
j = j + 1
Next
oUser.put "msExchMailboxGuid", Array(tmp)
Set TypeLib = Nothing
oUser.setinfo
If Err.Number <> 0 Then
Message = Message + vbCrLf + "Les attributs Exchange n'ont pas pu être modifiés"
' MsgBox ("Les attributs Exchange n'ont pas pu être modifiés")
Err.Clear
Else
Message = Message + vbCrLf + "La boîte a été créée"
End If----------------------------------
Function converthexa(st)
d = Right(st, 1)
Select Case d
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
converthexa = Asc(d) - 48
Case "A", "B", "C", "D", "E", "F"
converthexa = Asc(d) - 55
End Selectg = Left(st, 1)
Select Case g
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
converthexa = converthexa + 16 * (Asc(g) - 48)
Case "A", "B", "C", "D", "E", "F"
converthexa = converthexa + 16 * (Asc(g) - 55)
End SelectEnd Function
-
Bonjour, je reviens sur ce post 1 an après, car le problème ce pose pour moi aujourd'hui.
Je suis également sous Exchange 2007 et je ne parviens pas à utiliser votre script pour créer une boite mail. Lorsque que je l'exécute il me renvoi une erreur au niveau de la ligne
oUser.put "msExchMailboxGuid", Array(tmp)
Array(tmp) pose problème...
J'ai modifié le code pour mettre directement le NewGuid dedans, mais là lorsque j'arrive à la ligne
oUser.setinfo
il me renvoi l'erreur "violation de contrainte". Je suppose que cela vient du fait qu'il faut lui passer un nombre hexadécimal. Je suppose que c'est ce que vous faites grâce à
Array(tmp)
Si vous pouviez m'aider, je n'ai pas très envie de faire du powershell...
-
Bonsoir
avez-vous pu dimensionner la variable tmp en tant que tableau? dim tmp()
A noter que le script que j'ai indiqué fonctionne effectivement pour Exchange 2000 à 2007... MAIS, il n'est pas parfait pour Exchange 2007.
En effet, une boîte ainsi créée sur Exchange 2007 sera vue en tant que "Legacy User". Cela fonctionne donc bien avec Outlook, mais pas pour l'accès par OWA.
Une commande Powershell est alors la seule solution pour transformer la boîte en "Mailbox user".
A bientôt,
Cordialement
-
Bonjour
Oui pourtant j'ai bien dimensionner la variable tmp, et le tableau affiche correctement son contenu lorsque je fais tmp(0), tmp(1)...
Mais bon si ce n'est pas très "propre" je ne vais pas me lancer dans du bidouillage... si je dois utiliser powershell, alors je l'utiliserais...
Merci d'avoir répondu aussi vite, ça m'évite de perdre mon temps!
Bonne journée