Page 1 sur 1
[R] Savoir si l'utilisateur a un compte Outlook
Posté : lun. 07 avr. 2014 19:59
par Hugues
Bonjour,
Pour un de me mes script, j'envoie un Email automatique (via Outlook) en utilisant ce bout de code.
► Afficher le texte
Code : Tout sélectionner
$oOApp = ObjCreate("Outlook.Application")
$oOMail = $oOApp.CreateItem ($olMailItem)
$oOMail.Save
With $oOMail
.To = ("MyAdress")
.Subject = "Le titre du message"
.BodyFormat = $olFormatHTML
.Importance = $olImportanceHigh
.HTMLBody = "Blablablabla."
.Send
EndWith
$oOApp=0
Cela fonctionne très bien si le l'utilisateur possède un compte outlook, mais le problème est s'il n'en possède pas... Alors ma question est comment je peux savoir si l'utilisateur a un compte pour éviter que le script plante...
Je sais qu'il existe la fonction _INetSmtpMail(), mais je ne connais pas le nom de mon serveur smtp et je crois qu'on ne me le donnera pas...
Merci par avance.
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : lun. 07 avr. 2014 22:53
par jguinch
On trouve les informations de profil Outlook dans la base de registre, mais bon, c'est pas franchement pratique.
Je te poste une fonction tout faite que j'ai créé, ce sera plus simple que de t'expliquer
l'inexplicable merdier Microsoft dans cette clé de registre
Le code suivant te donne le nom du compte configuré dans le profil par défaut :
Local
► Afficher le texte
Code : Tout sélectionner
$sDefaultProfileName = _OutlookDefaultAccountName()
If $sDefaultProfileName Then MsgBox(0, "Compte Outlook par défaut", $sDefaultProfileName)
Func _OutlookDefaultAccountName()
; Récupération du profil par défaut
Local $sDefaultProfile = RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles", "DefaultProfile")
If $sDefaultProfile = "" Then Return 0
; Récuparation du nom du compte (en binary)
Local $sProfileName = RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\" & $sDefaultProfile & "\9375CFF0413111d3B88A00104B2A6676\00000004", "Account Name")
If $sProfileName = "" Then Return 0
; Retourne le nom du compte
Return BinaryToString(StringReplace($sProfileName, "00", ""))
EndFunc
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 07:30
par Hugues
Bonjour,
Merci pour ta réponse mais malheureusement cela ne fonctionne pas, car je n'ai aucune valeur de User dans ma base de Registre...
On utilise Outlook avec un serveur Exchange, je pense que ça doit être pour ça...
Bref je continu à creuser un p'tit peu...

Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 08:20
par jguinch
Bizarre... Moi aussi je suis sur Exchange, et pourtant j'ai bien les valeurs.
Par contre, ça peut dépendre de la version d'Outlook. Pour le 2013, je crois que c'est différent.
Tu as quelle version ?
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 09:27
par Hugues
J'ai Outlook 2007 SP3, et je n'ai pas le dossier
, je n'ai que 00000001, 00000002 & 00000003...
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 11:23
par jguinch
Tu as fais une recherche de "Account Name" ?
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 12:02
par Hugues
Oui, il y en a 1 dans les 3 dossiers precedemment cités. Mais pourquoi j'ai pas le 9375CFF0413111d3B88A00104B2A6676\00000004?
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 12:17
par jguinch
9375CFF0413111d3B88A00104B2A6676 est peut être propre à Office 2010...
Et si tu regardes dans la base de registre, quelle est la valeur de "Account Name" (en double-cliquant dessus, tu peux lire la valeur hexa en ~texte~) ?
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 12:56
par Hugues
Dans:
9375CFF0413111d3B88A00104B2A6676\00000001 -> Account Name: Carnet d'adresse Outlook
9375CFF0413111d3B88A00104B2A6676\00000002 -> Account Name: Microsoft Exchange
9375CFF0413111d3B88A00104B2A6676\00000003 -> Account Name: (données personnelles, je ne peut pas mentionner ici)
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 13:27
par jguinch
OK. Dans 00000003, est-ce que la valeur est celle qui correspond au nom du compte ?
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mar. 08 avr. 2014 14:25
par Hugues
Non, il me donne x S/LDAP (x étant confidentiel)

Ca ne serait pas encore une histoire de certificat?
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mer. 09 avr. 2014 00:13
par jguinch
Bon, j'ai eu un peu de temps pour regarder ça (après le match...

).
En fait, je me disais que le plus efficace serait encore de passer par Outlook directement.
Donc après quelques recherches, j'ai pu te pondre un petit truc qui j'espère fonctionnera avec Oulook 2007 :
► Afficher le texte_OutlookFindExchangeAccount
Code : Tout sélectionner
If _OutlookFindExchangeAccount() Then
MsgBox(0, "_OutlookFindExchangeAccount", "Il y a un compte Exchange configuré")
Else
MsgBox(48, "_OutlookFindExchangeAccount", "Aucun compte Exchange n'a été configuré")
EndIf
Func _OutlookFindExchangeAccount()
Local Const $olExchange = 0 ; An Exchange account.
Local $objOutlook = ObjCreate("Outlook.Application")
If NOT IsObj($objOutlook) Then Return SetError(1, 0, 0)
Local $oAccounts = $objOutlook.Session.Accounts
If NOT IsObj($objOutlook) Then Return SetError(2, 0, 0)
For $oAccount In $oAccounts
If $oAccount.AccountType = $olExchange Then Return 1
Next
Return 0
EndFunc
Du coup, je me suis dit que tant qu'à faire, on pouvait aussi retourner quelques infos supplémentaires :
► Afficher le texte_OutlookGetAccounts
Code : Tout sélectionner
#Include <Array.au3>
$aAccounts = _OutlookGetAccounts()
If IsArray($aAccounts) Then
MsgBox(0, "_OutlookGetAccounts", "Il y a " & $aAccounts[0][0] & " compte(s) configuré(s)")
_ArrayDisplay($aAccounts)
EndIf
Func _OutlookGetAccounts()
Local $aResult[1][2] = [[0]]
Local Const $olEas = 4 ; An account that uses Exchange ActiveSync (EAS) on mobile devices.
Local Const $olExchange = 0 ; An Exchange account.
Local Const $olHttp = 3 ; An HTTP account.
Local Const $olImap = 1 ; An IMAP account.
Local Const $olOtherAccount = 5 ; Other or unknown account.
Local Const $olPop3 = 2 ; A POP3 account.
Local $objOutlook = ObjCreate("Outlook.Application")
If NOT IsObj($objOutlook) Then Return SetError(1, 0, 0)
Local $oAccounts = $objOutlook.Session.Accounts
If NOT IsObj($objOutlook) Then Return SetError(2, 0, 0)
For $oAccount In $oAccounts
Redim $aResult [ UBound($aResult) + 1][2]
$aResult[0][0] += 1
Switch $oAccount.AccountType
Case $olEas
$aResult[UBound($aResult) - 1][0] = "ActiveSync"
Case $olExchange
$aResult[UBound($aResult) - 1][0] = "Exchange"
Case $olHttp
$aResult[UBound($aResult) - 1][0] = "HTTP"
Case $olImap
$aResult[UBound($aResult) - 1][0] = "IMAP"
Case $olOtherAccount
$aResult[UBound($aResult) - 1][0] = "Unknow"
Case $olPop3
$aResult[UBound($aResult) - 1][0] = "Pop3"
EndSwitch
$aResult[UBound($aResult) - 1][1] = $oAccount.DisplayName
Next
Return $aResult
EndFunc
Cette fonction te retourne un tableau contenant la liste des comptes :
- $array[0][0] : Nombre de comptes
- $array[x][0] : Type de compte
- $array[x][1] : Nom du compte
....
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mer. 09 avr. 2014 09:24
par TommyDDR
Pas mal, ça fonctionne parfaitement chez moi.
Juste histoire de mettre ma pâte à l'ouvrage, et pour gagner quelques octets ^^'
(Bien sur : Fonctionne seulement avec la dernière version d'AutoIt et l'arrivée des tableaux vide)
► Afficher le textecode
Code : Tout sélectionner
#Include <Array.au3>
$aAccounts = _OutlookGetAccounts()
If IsArray($aAccounts) Then
MsgBox(0, "_OutlookGetAccounts", "Il y a " & UBound($aAccounts, 1) & " compte(s) configuré(s)")
_ArrayDisplay($aAccounts)
EndIf
Func _OutlookGetAccounts()
Local $aResult[0][2]
Local Const $olAcounts[6] = ["Exchange", "IMAP", "Pop3", "HTTP", "ActiveSync", "Unknow"]
Local $objOutlook = ObjCreate("Outlook.Application")
If NOT IsObj($objOutlook) Then Return SetError(1, 0, 0)
Local $oAccounts = $objOutlook.Session.Accounts
If NOT IsObj($oAccounts) Then Return SetError(2, 0, 0)
For $oAccount In $oAccounts
Redim $aResult [ UBound($aResult) + 1][2]
$aResult[UBound($aResult) - 1][0] = $olAcounts[$oAccount.AccountType]
$aResult[UBound($aResult) - 1][1] = $oAccount.DisplayName
Next
Return $aResult
EndFunc
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mer. 09 avr. 2014 09:51
par Hugues
Meci mais ça ne fonctionne pas chez moi...
Lorsque je lance le script sur la session qui n'a pas de compte Outlook configuré, une fenêtre Outlook de vérification du nom s'affiche, puis Autoit me renvoie bien qu'il n'y a pas de compte configuré... Mais si je relance, il me dit qu'il y a un compte configuré...
Bref je ne comprend plus rien...
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : mer. 09 avr. 2014 20:24
par PandiPanda
Bonsoir,
J'ai pas la solution à votre problème cependant avez vous penser a regarder du coter de cet
udf?
Une autre "solution", c'est un peu contourné le problème en fait ... serai de crée un
objEvent()
avec ceci par exemple (quand il rencontre une erreur, il rentre dans cette fonction)
► Afficher le texte
Code : Tout sélectionner
; dans les premieres ligne ...
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
; ici votre code a vous, qui fait ce que vous voulez ...
Func _ErrFunc($oError)
MsgBox(64,"",@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Re: [..] Savoir si l'utilisateur a un compte Outlook
Posté : jeu. 10 avr. 2014 09:09
par Hugues
Ok, merci ca me convient.
Merci à tous pour votre aide.