Bonjour,
Je travaille actuellement sur l'implémentation de l'API de gestion de comptes Outlook, afin de pouvoir par la suite importer leur profil au sein d'une autre application.
Mon implémentation semble fonctionnelle, j'entend par là que delphi ne constate aucune erreur de compilation et que l'execution se déroule sans problème.
MAIS ! Lorsque je tente de lister les comptes POP3, aucun n'est trouvé, alors qu'Outlook me certifie l'existence de plusieurs comptes de ce type, tout fraichement créés.
Je pense que quelque chose m'échappe dans l'utilisation de l'API... voici donc mon code :
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
var
AccountManager : IOlkAccountManager;
AccountHelper : IOlkAccountHelper;
AccountEnum : IOlkEnum;
PAE : IUnknown;
Result : HRESULT;
compte : Cardinal;
LPUK : LPUNKNOWN;
begin
 
     Result := ActiveX.CoInitialize(nil);
     if Result <> S_OK then
     begin
        showmessage('Echec ActiveX.CoInitialize :'+IntToHex(Result, 8)); Application.Terminate;
     end;
 
     Result := ActiveX.CoCreateInstance(CLSID_OlkAccountManager,
     nil, CLSCTX_INPROC_SERVER, IID_IOlkAccountManager,
     AccountManager);
     if Result <> S_OK then
        showmessage('Echec de la création de l''instance :'+IntToHex(Result, 8));
 
     Result := AccountManager.Init(AccountHelper, OLK_ACCOUNT_NO_FLAGS);
     if Result <> S_OK then
        showmessage('Echec de l''initialisation de AccountManager :'+IntToHex(Result, 8));
 
     if AccountEnum <> nil then
        showmessage('ok');
 
     Result := AccountManager.EnumerateAccounts(@CLSID_OlkMail, @CLSID_OlkPOP3Account, OLK_ACCOUNT_NO_FLAGS, AccountEnum);
     if Result <> S_OK then
        showmessage('echec du listing des comptes :'+IntToHex(Result, 8));
 
     if AccountEnum <> nil then
        showmessage('ok2');
 
     Result := AccountEnum.Reset;
     if Result <> S_OK then
        showmessage('erreur AccountEnum.reset :' + IntToHex(Result, 8));
     Result := AccountEnum.GetNext(LPUK);
     if Result <> S_OK then
        showmessage('erreur AccountEnum.GetNext :'+IntToHex(Result, 8));
 
     compte := 1;
     Result := AccountEnum.GetCount(@compte);
     if Result <> S_OK then
        showmessage('erreur AccountEnum.GetCount :'+IntToHex(Result, 8));
 
     showmessage(inttostr(compte));
 
     AccountEnum := nil;
     AccountHelper := nil;
     AccountManager := nil;
     ActiveX.CoUninitialize;
Le résultat de l'exécution est le suivant (les boites de dialogues effectivement affichées) :
ok2
erreur AccountEnum.GetNext :00000001
0

Note : l'erreur trouvée sur AccoutEnum.GetNext n'en est pas une. L'énumérateur est simplement arrivé à la fin de la liste (voir doc msdn).

Nous arrivons donc aux questions :
- Sauriez vous comment on implémente correctement cette API ?
- Permet-elle comme je le crois de récupérer les informations propres aux comptes POP3, telles que l'adresse de messagerie, l'adresse du serveur smtp, ect... ou fais-je fausse route ?

Merci de vos réponses.