[C#/Exchange] Aanmaken/beheren openbaar adresboek

Pagina: 1
Acties:

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 24-05 09:20

Wacky

Dr. Lektroluv \o/

Topicstarter
Na letterlijk een paar dagen gezocht te hebben op google heb ik helaas (nog?) niets terug gevonden over het volgende:

Het is de bedoeling dat vanuit een C#/.NET applicatie (een relatie beheer systeem) de emailadressen van bedrijven en personen (opgeslagen in een SQL 2000 server) in het openbare adresboek van de Exchange 2000 server worden "weggeschreven".

De enige documentatie die ik terug kon vinden m.b.t. .Net & Exchange ging over het sturen van emails via exchange en het lezen van de inbox. Tevens heb ik nog steeds geen duidelijkheid kunnen vinden over wat ik nu precies het beste kan gebruiken om de verbinding met de Exchange server op te bouwen (CDO, MAPI, etc?).

Is er iemand die mij op weg kan helpen over zowel het tot stand brengen van de verbinding als het aanmaken/beheren van het openbare adres boek?

Nu ook met Flickr account


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Bedoel je hier de Exchange Server of de Client Outlook?

We adore chaos because we like to restore order - M.C. Escher


  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 24-05 09:20

Wacky

Dr. Lektroluv \o/

Topicstarter
LordLarry schreef op 07 april 2004 @ 20:29:
Bedoel je hier de Exchange Server of de Client Outlook?
Het openbare adresboek wordt (uiteraard) opgeslagen op de Exchange server zodat het hele bedrijf daar gebruik van kan maken.

Nu ook met Flickr account


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Je moet de CDO (CDOEX) components gebruiken van Exchange. Helaas zit er bij Outlook ook een CDO set. Die is echter onbruikbaar omdat deze 'beveiligd' is, en bv schermpjes oppopt of je het wel zeker weet.

De CDOEX components zitten, als ik me goed herinner, bij de Exchange SDK. Met die components kun je dan direct objects aanmaken in exchange.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 24-05 09:20

Wacky

Dr. Lektroluv \o/

Topicstarter
Okay, tnx! Ik ga er morgen weer mee aan de gang op m'n stage!

Nu ook met Flickr account


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wacky schreef op 07 april 2004 @ 21:09:
Het openbare adresboek wordt (uiteraard) opgeslagen op de Exchange server zodat het hele bedrijf daar gebruik van kan maken.
Ja, dat begrijp ik, maar je kan er op meerdere manier komen. Vandaar mijn vraag.

We adore chaos because we like to restore order - M.C. Escher


  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 24-05 09:20

Wacky

Dr. Lektroluv \o/

Topicstarter
Ok, de Exchange SDK is geinstalleerd en CDO is toegevoegd aan de references van m'n VS2003 project.

Hoe maak ik nu verbinding met de Exchange server :? Kan ook nergens fatsoenlijke howto's of codesamples (C#) vinden :/

[ Voor 5% gewijzigd door Wacky op 08-04-2004 11:39 ]

Nu ook met Flickr account


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Zit er bij de Exchange SDK geen documentatie? Je moet de COM / VB docs doornemen, de methods komen gewoon overeen.

In de MSDN (platform SDK) staat ook veel documentatie over CDO-EX.

Dit is uit de MSDN gecopied, C++ example, dat contacts toevoegt
C++:
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//Adding a New Contact with CDOEx

#import <cdoex.dll> rename_namespace("CDO") raw_interfaces_only

#include <stdio.h>
#include <tchar.h>

enum ConnectModeEnum
{
    adModeUnknown = 0,
    adModeRead = 1,
    adModeWrite = 2,
    adModeReadWrite = 3,
    adModeShareDenyRead = 4,
    adModeShareDenyWrite = 8,
    adModeShareExclusive = 12,
    adModeShareDenyNone = 16,
    adModeRecursive = 4194304
};

enum RecordCreateOptionsEnum
{
    adCreateCollection = 8192,
    adCreateStructDoc = -2147483648,
    adCreateNonCollection = 0,
    adOpenIfExists = 33554432,
    adCreateOverwrite = 67108864,
    adFailIfNotExists = -1
};

enum RecordOpenOptionsEnum
{
    adOpenRecordUnspecified = -1,
    adOpenSource = 8388608,
    adOpenAsync = 4096,
    adDelayFetchStream = 16384,
    adDelayFetchFields = 32768
};

void dump_com_error(_com_error &e)
{
    _tprintf(_T("Oops - hit an error!\n"));
    _tprintf(_T("\a\tCode = %08lx\n"), e.Error());
    _tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage());
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    _tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource);
    _tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription);
}

struct StartOle {
    StartOle() { CoInitialize(NULL); }
    ~StartOle() { CoUninitialize(); }
} _inst_StartOle;

void main(int argc, char** argv)
{
   HRESULT hr = S_OK;

   if(argc != 2)
   {
         printf("Usage: CreateContact\r\n");
         printf(
"Example: CreateContact \"file://./backofficestorage/mydomain.contoso.com/MBX/User1/Contacts\"\n");
         exit(0);
   }

   wchar_t* folderURL = NULL;
   size_t size;
   size = mbstowcs(NULL,argv[1],0);
   folderURL = (wchar_t*)malloc(size * sizeof(wchar_t*) + 1);
   mbstowcs(folderURL,argv[1],size+1);

   BSTR bstrFolderURL = SysAllocString(folderURL);

   try
   {
      CDO::IPersonPtr pPerson(_uuidof(CDO::Person));
      CDO::IDataSourcePtr pDsrc;

      pPerson->put_FirstName(L"John");
      pPerson->put_LastName(L"Smith");
      pPerson->put_HomeCity(L"Los Angeles");
      pPerson->put_HomeState(L"California");
      pPerson->put_Email(L"JohnSmith@contoso.com");
      pPerson->get_DataSource(&pDsrc);

      hr = pDsrc->SaveToContainer(bstrFolderURL,
                           0,
                           (enum CDO::ConnectModeEnum) adModeReadWrite,
                           (enum CDO::RecordCreateOptionsEnum)adCreateOverwrite,
                           (enum CDO::RecordOpenOptionsEnum)adOpenSource,
                           L"",
                           L"");

      if (SUCCEEDED(hr))
         _tprintf(_T("Contact created\n"));

   }
   catch(_com_error &e)
   {
      dump_com_error(e);
   }

   SysFreeString(bstrFolderURL);
}

De smart pointers die er worden aangemaakt komen overeen met object references. ZOals je ziet maakt hij een Person object aan en schrijft deze weg naar een folder. Dat is het idee. Je hebt ook nog CDOEXM, CDO voor Exchange Management. Tik in de MSDN in: CDOEX en je heb een lijst met docs :)

[ Voor 20% gewijzigd door EfBe op 08-04-2004 11:44 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com

Pagina: 1