Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer...

94
Exchange Exchange 2000 2000 Programmierschnittstellen Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH

Transcript of Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer...

Page 1: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ExchangeExchange 20002000 ProgrammierschnittstellenProgrammierschnittstellen

Michael KlopstockExchange System Engineer

Microsoft GmbH

Page 2: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADOADO

OLEDBOLEDB

EFDEFD

CMCCMCDAPIDAPI

ActiveActive MessagingMessagingActiveActive MessagingMessaging

Exchange Server InterfacesExchange Server Interfaces

SimpleSimple MAPIMAPISimpleSimple MAPIMAPI

Event ScriptingScriptingEvent ScriptingScripting

OLEOLE MessagingMessagingOLEOLE MessagingMessagingADSIADSI

Outlook Object ModelOutlook Object Model

Routing ObjectsRouting Objects

CDOEXMCDOEXM

Workflow EngineWorkflow Engine

ExtendedExtended MAPIMAPIExtendedExtended MAPIMAPI

CDO 1.21CDO 1.21CDO 1.21CDO 1.21 WEBDAVWEBDAV

XMLXML

CDOSYSCDOSYS

AVAPIAVAPI

Outlook FormsOutlook Forms

WEBFORMSWEBFORMS

LDAPLDAP

Client ExtensionsClient Extensions

COM-AddinsCOM-Addins

CDONTS CDONTS CDO 3.0CDO 3.0

Exchange 2000 SchnittstellenExchange 2000 Schnittstellen

Page 3: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

AgendaAgenda

Exchange 5.x Schnittstellen

• Store Schnittstellen

• Directory Schnittstellen

Exchange 2000 Schnittstellen

• Neue Store Schnittstellen

• Neue Directory Schnittstellen

Exchange 2000 Future

• Exchange 2000 SP1

• Exchange und .NET

Page 4: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange 5.x Store SchnittstellenExchange 5.x Store Schnittstellen

StoreStore

MAPIMAPI CDOCDO 1.211.21

Exchange Server Interfaces

CMCCMC

SimpleSimple MAPIMAPI

OLEOLE MessagingMessaging

ActiveActive MessagingMessaging

AVAPICDONTS

Page 5: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Extended MAPIExtended MAPI

Von über 100 Firmen und Microsoft definierter Standard, welcher das Zusammenspiel zwischen Komponenten und deren Schnittstellen definiert

Sämtliche Bestandteile des Exchange Servers kommunizieren u.a. über MAPI (Store, Gateways, Addressbook, Transport, etc.) und Clients (Exchange und Outlook)

OLE/COM basierend Programmierung nur mit C/C++

Page 6: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Extended MAPIExtended MAPI

MAPI ist ein offenes Konzept, nahezu alle Komponenten können durch eigene Implementierungen ersetzt oder erweitert werden

MAPI definiert, welche Schnittstellen Komponenten im Gesamtsystem haben müssen, die Implementierung selbst ist offen.

Realisiert über COM Interfaces (wie abstrakte Basisklassen)

Page 7: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Extended MAPIExtended MAPI

MAPIINIT_0 MapiInitStruct = {0, MAPIINIT_0 MapiInitStruct = {0, MAPI_NT_SERVICEMAPI_NT_SERVICE};};hResult = MAPIInitialize(&MapiInitStruct);hResult = MAPIInitialize(&MapiInitStruct);

// ...// ...

hResult = MAPILogonEx(0,hResult = MAPILogonEx(0, GetMAPIProfileName(),GetMAPIProfileName(), GetMAPIProfilePassword(),GetMAPIProfilePassword(), MAPI_NEW_SESSION | MAPI_NEW_SESSION | MAPI_NO_MAILMAPI_NO_MAIL,, &g_lpMAPISession);&g_lpMAPISession);

MAPIINIT_0 MapiInitStruct = {0, MAPIINIT_0 MapiInitStruct = {0, MAPI_NT_SERVICEMAPI_NT_SERVICE};};hResult = MAPIInitialize(&MapiInitStruct);hResult = MAPIInitialize(&MapiInitStruct);

// ...// ...

hResult = MAPILogonEx(0,hResult = MAPILogonEx(0, GetMAPIProfileName(),GetMAPIProfileName(), GetMAPIProfilePassword(),GetMAPIProfilePassword(), MAPI_NEW_SESSION | MAPI_NEW_SESSION | MAPI_NO_MAILMAPI_NO_MAIL,, &g_lpMAPISession);&g_lpMAPISession);

Wichtig: MAPIInitialize ruft intern CoInitialize (COINIT_APARTMENT..), um COM zu initialisieren, funktioniert also nicht in free-threaded COM Servern.

Lsg: MAPI32.DLL von Exchange 5.5 SP1 unterstützt Flag MAPI_NO_COINIT ( = 8)

Page 8: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: Extended MAPIDEMO: Extended MAPI

Erzeugen und Versenden einer NachrichtErzeugen und Versenden einer Nachricht

Page 9: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Nice Feature:

• Mapi unterstützt Notifications zwischen MAPI Objekten (Store und Addressbook)

• Bietet Client oder Serveranwendung die Möglichkeit, auf Änderungen wie Message angekommen, verschoben, geändert, gelöscht, Addressbucheintrag erzeugt, verändert, gelöscht etc. zu reagieren

• Implementiert über AdviseSinks (IMAPIAdviseSink::OnNotify)

MAPI Event Notifications (1)MAPI Event Notifications (1)

Page 10: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Event Typ Beschreibung Advise source Objekt

Neue Nachricht (fnevNewMail)

Eine Nachricht wurde zugestellt uund wartet auf Abarbeitung

Message Store, Ordner

Object kopiert (fnevObjectCopied)

Ein MAPI Objekt wurde kopiert Ordner, Nachrichten, alle Typen von Addrb. Objekten

Object modifiziert(fnevObjectModified)

Ein MAPI Objekt wurde verändert Ordner, Nachrichten, alle Typen von Addrb. Objekten

Object erzeugt (fnevObjectCreated

Ein MAPI Objekt wurde erzeugt Ordner, Nachrichten, alle Typen von Addrb. Objekten

Object verschoben (fnevObjectMoved)

Ein MAPI Objekt wurde verschoben Ordner, Nachrichten, alle Typen von Addrb. Objekten

Object gelöscht (fnevObjectDeleted)

Ein MAPI Objekt wurde gelöscht Ordner, Nachrichten, alle Typen von Addrb. Objekten

Critical error (fnevCriticalError)

Globaler Fehler oder Event wie Session Shutdown

Alle Store und Adressbuch Objekte, Tabellen, Status

Erweiterter event (fnevExtended)

Ein interner Event, von einem spezifischen Provider ausgelöst

Jedes Advise Source Objekt

Suche fertig(fnevSearchComplete)

Eine Suchoperation ist beendet und die Ergebnisse liegen bereit

Ordner

Tabelle modifiziert (fnevTableModified)

Information in einem MAPI Tabellen Objekt haben sich geändert

Tabellen

MAPI Event Notifications (2)MAPI Event Notifications (2)

Page 11: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: MAPI Event NotificationDEMO: MAPI Event Notification

MDB Viewer (MDBVU32) DemoMDB Viewer (MDBVU32) Demo

Page 12: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

MAPI ResourcesMAPI Resources

MAPI Links:• http://msdn.microsoft.com/exchange • Exchange Server 2000 Documentation / Messaging API (MAPI)

• http://peach.ease.lsoft.com/archives/mapi-l.html

MAPI Bücher:• "Inside MAPI", Les Thaler (http://www.insidemapi.com)

• Ben Götter, "Developing Applications for Microsoft Exchange with C++"

• Nik Okuntsev, "Programming MS Exchange Server", http://www.wrconsulting.com/Software/Publications/Exchange/Contents.htm

Page 13: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Microsoft Exchange Server hat eigene Interfaces (11 St.), zugehörige Methoden und Runtime Functions (317 St.)

Exchange Dienste benutzen sowohl MAPI als auch Exchange Server Interfaces, deren Methoden und Runtime functions

Exchange Server Interfaces sind hauptsächlich für das Managen des Stores gedacht. (Rules erzeugen, ACL’s auf Folder, Synchronisation, ..)

Eigene Anwendungen können diese Interfaces und Methoden ebenfalls nutzen

Exchange Server InterfacesExchange Server Interfaces

Page 14: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Server InterfacesExchange Server Interfaces

IExchangeExportChanges (EDKMDB.H) IExchangeFavorites (EDKMDB.H) IExchangeFolderACLs (ACLCLS.H) IExchangeFolderRules (RULECLS.H) IExchangeImportContentsChanges (EDKMDB.H) IExchangeImportHierarchyChanges (EDKMDB.H) IExchangeManageStore (EDKMDB.H) IExchangeModifyTable (EDKMDB.H) IExchangeRuleAction (EDKMDB.H) IExchangeRuleExt (EXCHCLI.H) IExchangeRuleExtCallback (EXCHCLI.H)

Page 15: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Server InterfacesExchange Server Interfaces

Die Exchange Server Runtime Functions (317 Stück) werden in zwei Gruppen unterteilt:

• Core functions

• Dazu gehören Functionen für Directory Zugriff (DAPI), Proxy Address Generation, Routing Table (SAD_xx), Admin Extension, Tracing, Installation, Rules, MAPI helper und Gateways

• Non Core functions

• Dazu gehören Funktionen für Gateways, Service, Event, Logging, Konfiguration und Konvertierung

Page 16: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Server Interfaces (ICS)Exchange Server Interfaces (ICS)

Incremental Change Synchronization (ICS) ist Teil der Exchange Server Interfaces

Wird verwendet, um Änderungen in der Storestruktur und Storeinhalt mitzuprotokollieren, abzufragen und um Änderungen zu synchronisieren.

Der Exchange Server 5.5 Event Service benutzt dieses Interface.

Interfaces des ICS:• IExchangeExportChanges IExchangeExportChanges

IExchangeImportHierarchyChangesIExchangeImportHierarchyChangesIExchangeImportContentsChangesIExchangeImportContentsChanges

Page 17: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Incremental Change SynchronisationIncremental Change Synchronisation

Interface, um Store Inhalte/Hierachie zu synchronisieren

Exchange Private Store (Mailboxen)Exchange Public Store (Öffentliche

Ordner)nicht verfügbar für PST oder OST

StoresZugriff via MAPI, sind aber spezifisch

für Microsoft ExchangeBeispiel: Platform SDK April99: ICSAGENTWIZARD

Page 18: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Incremental Change SynchronisationIncremental Change Synchronisation

Schnittstellen• Synchronizer interface

• IExchangeExportChanges

• Collector interfaces• IExchangeImportHierarchyChanges• IExchangeImportContentsChanges

Zwei verschiedene Synchronizer für Hierarchietabelle und Inhalttabelle

• PR_HIERARCHY_SYNCHRONIZER• PR_CONTENTS_SYNCHRONIZER

Realisiert über ein IStream Objekt, welches den aktuellen Status der Synchronisation enthält

Das Format des Synchronisations Status Objekts wird vom Collector/Synchronizer definiert

Enthält Informationen über alle importierten und exportierten Daten

Page 19: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Ab 5.5 SP3 (scannt nur Attachments) Anti-Viren Hersteller implementiert DLL

mit 3 exportierten Funktionen:

• VirusScanInit

• VirusScanTerm

• VirusScanAndClean

Infos für Admin's: Q263949 Ab Exchange 2000 SP1 AVAPI 2.0

• scannt alle Properties

Anti Virus APIAnti Virus API

Page 20: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Definiert von der X-Open Application Program Interface Association (XAPIA). • 10 simple Funktionen um Email-Funktionalität in Anwendungen

zu integrieren Senden, Empfangen und Adressenauflösung

• Plattformunabhängig (Win Implementation verwendet MAPI)

Sample im Platform SDK: CMC.CLI

cmc_sendcmc_send_documentscmc_act_oncmc_listcmc_readcmc_lookupcmc_logoncmc_logoffcmc_freecmc_queryconfiguration

AnwendungAnwendung

CMCCMC

Ruft Cmc_logonRuft Cmc_logon

Extended MAPIExtended MAPI

Map

i32.dll

CM

C.D

LL

Common Messaging Calls (CMC)Common Messaging Calls (CMC)

Page 21: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

12 simple Funktionen um Email-Funktionalität in Client- Anwendungen zu integrieren

AnwendungAnwendung

Extended MAPIExtended MAPI

Ruft lpfnMapiSendMail(...)lpfnMapiSendMail(...)

MapiSendMail(...)MapiSendMail(...) Map

i32.dll

MAPIAddress MAPIDeleteMail MAPIDetails MAPIFindNext MAPIFreeBuffer MAPILogoff MAPILogon MAPIReadMail MAPIResolveName MAPISaveMail MAPISendDocuments MAPISendMail

MAPIAddress MAPIDeleteMail MAPIDetails MAPIFindNext MAPIFreeBuffer MAPILogoff MAPILogon MAPIReadMail MAPIResolveName MAPISaveMail MAPISendDocuments MAPISendMail

Simple MAPISimple MAPI

Page 22: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Ab Exchange 4.0 mitgeliefert (MDISP32.DLL)

Nur für Client-side Messaging Apps

• Programmierbar mit Visual Basic, Visual Basic® for Applications, C, C++, etc

Bietet mehr Funktionalität als Simple MAPI oder CMC

• Folder Zugriff, mehr Adressbuch Properties, mehr Message Properties, Custom Properties, etc.

Wesentlich einfacher zu programmieren als Extended MAPI

OLE/Active Messaging (1)OLE/Active Messaging (1)

Page 23: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

'Create the Session ObjectSet objSession = CreateObject("mapi.session")

'Logon using the session objectobjSession.Logon profileName:=“Michael Klopstock"

'Add a new message object to the OutBoxSet objMessage = objSession.Outbox.Messages.AddobjMessage.subject = "This is a test.”objMessage.Text = "This is the message text.”

'Add a recipient object to the objMessage.Recipients collectionSet objRecipient = objMessage.Recipients.Add'Set the properties of the recipient objectobjRecipient.Name = ”Michael Klopstock”objRecipient.Type = mapiTo objRecipient.Resolve 'Send the messageobjMessage.Send showDialog:=False

'Logoff using the session object objSession.Logoff

OLE/Active Messaging (2)OLE/Active Messaging (2)

Page 24: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

COM Server basierend auf MAPI Nachfolger von Active Messaging Mitgeliefert mit Microsoft Exchange 5.x und

Outlook Support für Server-seitige und Client- seitige

Anwendungen Support für Web Anwendungen Kompatibel mit Active Messaging 1.0

CDO 1.xCDO 1.x

Page 25: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDO 1.21CDO 1.21

AnwendungAnwendung

CDO CDO (CDO.DLL)(CDO.DLL)

ExtendedMAPIExtendedMAPI(MAPI32.DLL)(MAPI32.DLL)

CDO::CDO() // KonstruktorCDO::CDO() // Konstruktor{{ MapiInitialize(...., ..., ....); }MapiInitialize(...., ..., ....); }

CDO::Logon(LPSTR lpstrProfile,....)CDO::Logon(LPSTR lpstrProfile,....){{

MAPILogonEx(lpstrProfile,....);MAPILogonEx(lpstrProfile,....);}}

Set objSession = CreateObject("MAPI.Session") Set objSession = CreateObject("MAPI.Session") objSession.Logon 'profileName:=”M. Klopstock”..objSession.Logon 'profileName:=”M. Klopstock”..Set objMessage = objSession.Outbox.Messages.Add Set objMessage = objSession.Outbox.Messages.Add objMessage.Subject = "Sample Message" objMessage.Subject = "Sample Message" objMessage.Text = ”Test." objMessage.Text = ”Test." Set objOneRecip = objMessage.Recipients.AddSet objOneRecip = objMessage.Recipients.AddobjOneRecip.Name = ”Sepp Meier" objOneRecip.Name = ”Sepp Meier" objOneRecip.Type = CdoTo objOneRecip.Type = CdoTo objOneRecip.Resolve objOneRecip.Resolve objMessage.Update objMessage.Update objMessage.Send showDialog:=False objMessage.Send showDialog:=False objSession.Logoff objSession.Logoff

Page 26: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDO Object Model 1.xCDO Object Model 1.xSessionSession

InfoStoresInfoStores

RootFolderRootFolder

FieldsFields

AttachmentsAttachments

RecipientsRecipients

Folders…Folders…

MessagesMessages

FieldsFields

Objekt und CollectionObjekt und Collection

Nur ObjektNur Objekt

FieldsFields

FieldsFields

MessageFilterMessageFilter

AddressListsAddressLists

AddressEntryFilterAddressEntryFilter

FieldsFields

AddressEntriesAddressEntries

FieldsFields

Page 27: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

SessionSession

InfoStoresInfoStores

RootFolderRootFolder

Objekt und CollectionObjekt und Collection

Nur ObjektNur Objekt

AppointmentItemAppointmentItem

MeetingItemMeetingItem

RecipientsRecipients

MessagesMessages

RecipientRecipient

MethodeMethode

GetFreeBusyGetFreeBusy

GetDefaultFolderGetDefaultFolder

GetAddressListGetAddressList

RecurrencePatternRecurrencePattern

MessageMessage

GroupHeaderGroupHeader

CDO 1.21 Object Modell (Neu)CDO 1.21 Object Modell (Neu)

Page 28: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Anzeige von Kalendereinträgen eines Zeitraums

DEMO: CDO 1.21DEMO: CDO 1.21

Page 29: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Event ServiceExchange Event Service

Ab Exchange Version 5.5 Der Exchange Server Event Service registriert

sich bei MAPI, um Folder Notifications vom Store zu bekommen

Nach Erhalt einer Notification stösst der Event Service den ICS an, um die Art der Veränderung festzustellen

Daraus konstruiert der Event Service einen Event, der an die installierten Agents (Default = Event Scripting Agent) weitergereicht wird.

Page 30: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Event Handler Agent: Man kann beim Exchange Server Event Service

eigene Agents (siehe Event Scripting Agent) registrieren, um folgende Events abzufangen:

Erzeugen einer Nachricht in einem OrdnerÄnderung einer Nachricht in einem OrdnerLöschen einer Nachricht in einem Ordner

Ein Event Handler Agent ist ein Standard COM Object• IExchangeEventHandler Interface muss implementiert werden

• ExecuteEvent() Funktion muss implementiert werden:

Infos in MSDN unter:Platform SDK/Database und Messaging Service/Microsoft Exchange Server/ Exchange Server Programmer’s Reference/Guide/ Exchange Server Scripting Agent/Advance Topics:Custom Agents

Exchange Event ServiceExchange Event Service

Page 31: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Mögliche Events:• OnMessageCreated

• OnMessageChanged

• OnMessageDeleted

• OnTimer (Min 15 min)

Vorsicht:• Asynchrones Processing

• wenn z.B.: auf Outbox angewandt, dann kann Message schon wieder gelöscht sein, bis der Agent darauf zugreift.

• Single Threaded => Skalierung ! Mögliche Anwendungsbereiche:

• Periodisches Archivieren von Nachrichten und/oder Attachments

• Workflow Anwendungen (Post in Public Folder, etc.)

Exchange Scripting AgentExchange Scripting Agent

Page 32: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Einrichten eines Scripting agents

Demo: Exchange Scripting AgentDemo: Exchange Scripting Agent

Page 33: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Basiert auf Exchange Event Service Erweitert Exchange 5.5 Server Scripting:

• Ziel: Vereinfachung der Erstellung von Routing und Tracking Anwendungen mit Scripting

• Nicht-Ziel: Volle Workflow Funktionalität bieten

Ab Exchange 5.5 Service Pack 1 Zielgruppe sind "Corporate Developers" und

"Solution Providers"

Exchange Routing ObjectsExchange Routing Objects

Page 34: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

"Hub and Spoke" Architektur• Hub = Nabe = Ordner, Spoke = Speiche = Stationen

"Hub" Ordner enthält:• Custom agent (event handler)

• Exchange routing engine (ExRtEng.dll)

• Eine Prozessdefinition• Routing map Objekt

• Maps sind eine sequentielle Liste von Aktionen

• Satz der zur Verfügung stehenden VB Script Funktionen

• Die gesamte Logik verbleibt auf dem Server

Exchange Routing ObjectsExchange Routing Objects

Page 35: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Logische Routen AnsichtLogische Routen Ansicht

AA BB CCStart=>Start=>

BB CCHub sends item to B Hub sends item to B who advances route who advances route by replying to hubby replying to hub

Hub sends item to C Hub sends item to C completes process by completes process by C replying to hubC replying to hub

AAStart=>Start=>

User instantiates User instantiates process by process by submitting item to submitting item to hub folderhub folder

Hub sends item to A Hub sends item to A who advances route who advances route by replying to hubby replying to hub

Technische Routen AnsichtTechnische Routen Ansicht

Hub containing Hub containing Process DefinitionProcess Definition

Exchange Routing ObjectsExchange Routing Objects

Page 36: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Routing ObjectsExchange Routing Objects

ActivityID Activity FlagsParameter 1 Parameter 21000 Send 2 Bob Smith IPM.Note1010 Wait 0 100801020 ORSplit 0 IsTimeout1030 Goto 0 50001040 Receive 2 FALSE1050 Consolidate 2 FALSE1060 goto 0 100005000 CustomExpiry 2 Manager IPM.Alert

10000 Terminate 0

Routing MAP• Sequentielle Liste von Aktionen

• Aktionen können interne sein (Flags=0), oder externe im Skript (Flags=2)

• Aktionen haben 0 oder mehr Parameter

• Jeder Parameter entspricht 1 Spalte

Page 37: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

VoteTableVoteTable

MapMap

LogLog

ProcInstanceProcInstance

ParticipantParticipant

VoteTableVoteTable

RowRow

RouteDetailsRouteDetails

WorkItemWorkItem

MapMap RowRow

= given to script at runtime= given to script at runtime

= objects you (typically) create= objects you (typically) create

Exchange Routing ObjectsExchange Routing Objects

Routing objects (ExRtObj.dll)Routing objects (ExRtObj.dll)

Page 38: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Client ExtensionsExchange Client Extensions

DLLs um die Funktionalität von Exchange oder Outlook zu erweitern

COM-basiert Installation

• Registry unter HKLM\Software\Microsoft\Exchange\Client\Extension

• Outlook benutzt ECF Files oder Registry

Infos auf MSDN unter: Platform SDK/Database and messaging services/Extending the Microsoft Exchange ClientSamples im Platform SDK: Event Extension: EVENTS.EXT Command extension: COMMAND.EXTProperty Sheet Extension: PROPSH.EXT

Page 39: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange Client ExtensionsExchange Client Extensions

Event Extension

• IExchExtSessionEvents (Neue Message eingetroffen,etc.)IExchExtUserEvents (Selektiertes Item (Listbox, Text, ...))IExchExtMessageEvents (Message Read, Write, Submit, ...)IExchExtAttachedFileEvents (Attachment open, - Verhalten,.)

Command Extensions

• IExchExtCommands (Menu, Toolbar, Delete Command, ...)IExchExtUserEvents (Selektiertes Item (Listbox, Text, ...))

Propertysheet Extension

• IExchExtPropertySheets (Eigene Prop-sheets für Msg, Props) Adanced Criteria Extension

• IExchExtAdvancedCriteria (Advanced Search Dlg modifizieren) Task and Session Extensions

• IExchExt (Client Start/Shutdown/Logon/Logoff) Modal and modeless Extension Windows

• IExchExtModeless ( Eigene Fenster, mit Callback Routine)

Page 40: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDONTSCDONTS

Standard SMTP Mailer für Server Anwendungen

SMTP send & receive message handling Wird mit IIS 4.0 and Exchange 5.5

installiert Nicht authentiziertes “anonymous”

Versenden von Nachrichten Plain text, HTML, und MHTML Message UUEncoded or Base64 content

encoding

Page 41: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: CDONTSDEMO: CDONTS

Versenden von Email mit 4 Zeilen CodeVersenden von Email mit 4 Zeilen Code

Page 42: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADOADO

OLEDBOLEDB

EFDEFD

CMCCMCDAPIDAPI

ActiveActive MessagingMessagingActiveActive MessagingMessaging

Exchange Server InterfacesExchange Server Interfaces

SimpleSimple MAPIMAPISimpleSimple MAPIMAPI

Event ScriptingScriptingEvent ScriptingScripting

OLEOLE MessagingMessagingOLEOLE MessagingMessagingADSIADSI

Outlook Object ModelOutlook Object Model

Routing ObjectsRouting Objects

CDOEXMCDOEXM

Workflow EngineWorkflow Engine

ExtendedExtended MAPIMAPIExtendedExtended MAPIMAPI

CDO 1.21CDO 1.21CDO 1.21CDO 1.21 WEBDAVWEBDAV

XMLXML

CDOSYSCDOSYS

AVAPIAVAPI

Outlook FormsOutlook Forms

WEBFORMSWEBFORMS

LDAPLDAP

Client ExtensionsClient Extensions

COM-AddinsCOM-Addins

CDONTS CDONTS CDO 3.0CDO 3.0

Exchange 2000 SchnittstellenExchange 2000 Schnittstellen

Page 43: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DirectoryDirectory

EMSABP.DLLEMSABP.DLL MAPIMAPI

LDAPLDAP ADSIADSI

Directory API (DAPI)Directory API (DAPI)

Exchange Directory verwaltet Informationen über Exchange Directory verwaltet Informationen über sämtliche installierten Objekte ( Mailboxen, Ordner, sämtliche installierten Objekte ( Mailboxen, Ordner, etc..) deren Struktur und Attribute (=Schema)etc..) deren Struktur und Attribute (=Schema)

Exchange 5.x Directory SchnittstellenExchange 5.x Directory Schnittstellen

Page 44: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory ZugriffDirectory Zugriff

Via MAPI address book provider

• OK für read-only, Schreibzugriff eingeschränkt

Via LDAP/ADSI

• Microsoft Exchange 5.0 unterstützt LDAP v2 read

• Microsoft Exchange 5.5 unterstützt voll read/write LDAP v3

• ADSI benutzt den LDAP provider

Via Directory access functions (DAPI)

• Nicht vorhanden in Exchange 2000 !

Page 45: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory Zugriff LDAP/ADSIDirectory Zugriff LDAP/ADSI

LDAP/ADSI LDAP (Lightweight Directory Access Protocol) bildet

das Zugriffsprotokoll auf Objekte im AD Jedes Objekt ist über einen eindeutigen LDAP-Pfad

adressierbar ADSI (Active Directory Service Interface) ist die

Abstraktionsschicht für Zugriffe auf das AD (via LDAP)• Anwendungen können entweder die LDAP API benutzen oder

das Active Directory Service Interface (ADSI) benutzen

Vorteil von LDAP: • IETF Standard

Vorteil von ADSI: • Einfacher zu programmieren,

• Unabhängig vom darunterliegenden Directory Service

Page 46: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

LDAP KonventionenLDAP Konventionen

Ein LDAP Pfad (URL) besteht aus

• DC = Domain Context

• CN = Common Name LDAP://CN=Michael

Klopstock,CN=Users,DC=seldom,DC=de

Wird von hinten nach vorne gelesen:

In der Domäne seldom.de im Container Users der Benutzer Michael Klopstock

Page 47: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADSI Object ModellADSI Object Modell

IADs IADsUser IDispatch IADsContainer IADsPropertyList, IADsPropertyEntry,

IADsPropertyValue IADsSecurityDescriptor,

IADsAccessControlList, IADsAccessControlEntry

Page 48: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADSI Bind and EnumerateADSI Bind and Enumerate

Dim MyContainer As IADsContainer‘‘Bind to container objectBind to container object

Set MyContainer = GetObject("LDAP://MyLdapSvr/O=Internet/DC=Redmond")

‘‘Enumerate child objectsEnumerate child objects

for each Object in MyContainer

Debug.Print Object.ADsPath

Next

Page 49: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: Directory Zugriff ADSIDEMO: Directory Zugriff ADSI

Setzen des Extension-Data-Attributes1 eines Exchange Users via ADSI

Setzen des Extension-Data-Attributes1 eines Exchange Users via ADSI

Page 50: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory ZugriffDirectory Zugriff

Via DAPI (Directory API) Proprietäre API für den Zugriff auf das

Exchange Directory (10 Funktionen, 6 Callback Funktionen)

Wird vorrangig benutzt um Attribute eines “Containers” (Mailbox, Gateways, etc. ) aus dem Directory zu lesen/schreiben sowie für Installation und Konfiguration von Gateways

Samples im Platform SDK• DIRSYNC: Importing and Exporting Mailboxes

• DSEXPORT: Exporting Directory Objects

• DSIMPORT: Importing Directory Objects

Page 51: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory Zugriff via DAPI (1)Directory Zugriff via DAPI (1)

#include <dapi.h> int main( void ) { DAPI_PARMS prms = {0}; prms.dwDAPISignature = DAPI_SIGNATURE; prms.dwFlags = DAPI_CREATE_NT_ACCOUNT;

// Initialize base point and container prms.pszBasePoint = "/o=REORG/ou=THEFARSITE "; prms.pszContainer = "/cn=Recipients"; PDAPI_EVENT pDAPIEvent = NULL; DAPI_HANDLE hDAPISession = NULL; pDAPIEvent = DAPIStart(&hDAPISession, &prms);

ATT_NAME avAttrName [4]; // Initialize avAttrName[0].DapiType = DAPI_STRING8; avAttrName[0].Value.pszA = "Obj-Class"; avAttrName[0].size = 9; avAttrName[0].pNextValue = NULL; avAttrName[1].DapiType = DAPI_STRING8; avAttrName[1].Value.pszA = "Directory Name"; avAttrName[1].size = 14; avAttrName[1].pNextValue = NULL;

Page 52: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory Zugriff via DAPI (2)Directory Zugriff via DAPI (2)

avAttrName[2].DapiType = DAPI_STRING8; avAttrName[2].Value.pszA = "Home-Server"; avAttrName[2].size = 11; avAttrName[2].pNextValue = NULL; ZeroMemory( &avAttrName[3], sizeof(ATT_VALUE) );

ATT_VALUE avAttrValue[4]; avAttrValue[0].DapiType = DAPI_STRING8; avAttrValue[0].Value.pszA = "Mailbox"; avAttrValue[0].size = 8; avAttrValue[0].pNextValue = NULL; avAttrValue[1].DapiType = DAPI_STRING8; avAttrValue[1].Value.pszA = "NewAccount"; avAttrValue[1].size = 10; avAttrValue[1].pNextValue = NULL; avAttrValue[2].DapiType = DAPI_STRING8; avAttrValue[2].Value.pszA = ”NTMIKEKLOP"; avAttrValue[2].size = 7; avAttrValue[2].pNextValue = NULL; ZeroMemory( &avAttrValue[3], sizeof(ATT_VALUE) );

Page 53: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory Zugriff via DAPI (3)Directory Zugriff via DAPI (3)

DAPI_ENTRY deAttr; DAPI_ENTRY deValues; deAttr.unAttributes = 3; deAttr.ulEvalTag = TEXT_VALUE_ARRAY; deAttr.rgEntryValues = &avAttrName[0]; deValues.unAttributes = 3; deValues.ulEvalTag = VALUE_ARRAY; deValues.rgEntryValues = &avAttrValue[0]; char * pAccount = NULL; char * pPassword = NULL; ULONG ulUSN = 0; pDAPIEvent = DAPIWrite( hDAPISession, DAPI_WRITE_CREATE, &deAttr, &deValues, &ulUSN, &pAccount, &pPassword );

Page 54: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Directory Zugriff via DAPI (4)Directory Zugriff via DAPI (4)

if ( pDAPIEvent ) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, pDAPIEvent->hinstDAPI, pDAPIEvent->dwDAPIError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); MessageBox( NULL, (char *) lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); } // Terminate DAPI session DAPIEnd( &hDAPISession ); return ( 0 );}

Page 55: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DAPIDAPI

DAPIDAPI

Client(s) wie z.B. Outlook, eigene Anwendungen, etc.Client(s) wie z.B. Outlook, eigene Anwendungen, etc.

MAPIMAPI

CDO 1.21CDO 1.21 CMCCMCS. MAPIS. MAPI

Addrb. P.Addrb. P.Store P.Store P. Trans. P.Trans. P. MAPIMAPISpoolerSpooler

MAPI/RPCMAPI/RPC

Client Client Extension/Extension/COM-AddinCOM-Addin

DLLDLL

Exchange StoreExchange Store

MAPIMAPI SystemSystem AttAtt..

MTAMTA

Event SvcEvent Svc

ScriptScript

ICSICS

CDO 1.21CDO 1.21

Event ScriptEvent Script AgentAgent

Eigene Apps,Services, GatewaysEigene Apps,Services, GatewaysE

xch

an

ge

Ex

cha

ng

eD

irec

tory

Dire

cto

ry

ADSIADSI

LD

AP

LD

AP

ADSIADSI

LDAP ProviderLDAP Provider

LDAP ProviderLDAP Provider

DAPIDAPI

GatewaysGateways

ClientClient

ServerServer

Internet SMTP,

Pop3, etc.

Internet SMTP,

Pop3, etc.

Überblick Exchange 5.x SchnittstellenÜberblick Exchange 5.x Schnittstellen

CDONTSCDONTS

Routing Routing EngineEngine

Page 56: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADOADO

OLEDBOLEDB

EFDEFD

CMCCMCDAPIDAPI

ActiveActive MessagingMessagingActiveActive MessagingMessaging

Exchange Server InterfacesExchange Server Interfaces

SimpleSimple MAPIMAPISimpleSimple MAPIMAPI

Event ScriptingScriptingEvent ScriptingScripting

OLEOLE MessagingMessagingOLEOLE MessagingMessagingADSIADSI

Outlook Object ModelOutlook Object Model

Routing ObjectsRouting Objects

CDOEXMCDOEXM

Workflow EngineWorkflow Engine

ExtendedExtended MAPIMAPIExtendedExtended MAPIMAPI

CDO 1.21CDO 1.21CDO 1.21CDO 1.21 WEBDAVWEBDAV

XMLXML

CDOSYSCDOSYS

AVAPIAVAPI

Outlook FormsOutlook Forms

WEBFORMSWEBFORMS

LDAPLDAP

Client ExtensionsClient Extensions

COM-AddinsCOM-Addins

Exchange 2000 SchnittstellenExchange 2000 Schnittstellen

CDONTS CDONTS CDO 3.0CDO 3.0

Page 57: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Neue Exch. 2000 SchnittstellenNeue Exch. 2000 Schnittstellen

ADO/OLEDB CDO 3.0 Workflow Engine CDOSYS XML WEBDAV WEBFORMS

WARUM ?????WARUM ?????

Page 58: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Universeller Datenzugriff auf alle Datenbanken via ADO/OLEDB

CDO 3.0 zum Erzeugen von ADO Records

Neue synchrone Events = neue Workflow Engine

CDONTS nur auf Server, CDOSYS Server und Client

WEB, WEB, WEB • => Einheitliches Transportprotokoll

• = HTTP (WEBDAV) und XML

Neue Exch. 2000 SchnittstellenNeue Exch. 2000 Schnittstellen

Page 59: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange 2000 ArchitekturExchange 2000 Architektur

Page 60: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

OLEDBOLEDB

Zwei verschiedene Provider:

• Remote: Client OLE/DB provider über DAV• Outlook

• CDO

• Office

• Lokal: Client OLE/DB provider über COM• Virenscanner

• Dokumentenmanagement

• Workflow

Page 61: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADO 2.5 – Object ModelADO 2.5 – Object Model

ConnectionConnection

CommandCommand

RecordsetRecordset

ErrorsErrors

FieldsFields

ParametersParameters

RecordRecord StreamStream

Page 62: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ADO 2.5ADO 2.5

Connection

• Implizit• URL an die Open Methode des Record Objekts

übergeben

• Explizit• Connection Objekt öffnen

• Transaktionen

• Errors collection

• SQL Select queries

Page 63: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Connection via ADOConnection via ADO

Implizit: dim Rec as New ADODB.Record

strURL = "file://./backofficestorage/" & DomainName &

"/" & strLocalPath

Rec.Open strURL

Explizit: Dim Rec As New ADODB.Record

Dim Conn as New ADODB.Connection

Dim Stm as ADODB.Stream

Conn.Provider = "ExOLEDB.DataSource"

Conn.Open "http://server/folder"

Rec.Open "http://server/folder/item.txt", Conn

Set Stm = Rec.Fields(adDefaultStream).Value

Page 64: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDO 3.0CDO 3.0

Ersetzt und erweitert CDO for Windows 2000 (CDOSYS)

• Abwärtkompatibel

Zugriff auf public und private Stores Erweiterbar mit eigenen Komponenten Aggregation mit ADO

Page 65: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDO 3.0CDO 3.0

Dim conn as New ConnectionDim conn as New Connection

Dim rs as New RecordsetDim rs as New Recordset

Dim msg as New MessageDim msg as New Message

fldr = “file://./backofficestorage/domainfldr = “file://./backofficestorage/domain/MBX/user/inbox”/MBX/user/inbox”

conn.open fldr,”fred”,”whatever”,adRunAsyncconn.open fldr,”fred”,”whatever”,adRunAsync

Set rs = conn.execute “Set rs = conn.execute “Select * from scope(‘shallow traversal of Select * from scope(‘shallow traversal of

“ “ & fldr & ”’) where urn:schemas:mailheader:subject = ‘hello’& fldr & ”’) where urn:schemas:mailheader:subject = ‘hello’””

msg.DataSource.Open rs(“DAV:href”),connmsg.DataSource.Open rs(“DAV:href”),conn

msg.Attachments(1).SaveToFile “C:\temp\file.doc”msg.Attachments(1).SaveToFile “C:\temp\file.doc”

msg.DataSource.Savemsg.DataSource.Save

Page 66: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDO 3.0CDO 3.0

Public Sub SimpleMeetingRequest()Public Sub SimpleMeetingRequest()

Dim objAppt As New AppointmentDim objAppt As New Appointment

Dim objReq As New CalendarMessageDim objReq As New CalendarMessage

objAppt.Subject = "Termin"objAppt.Subject = "Termin"

objAppt.StartTime = "10/4/99 1:00PM"objAppt.StartTime = "10/4/99 1:00PM"

objAppt.EndTime = "10/4/99 2:00PM"objAppt.EndTime = "10/4/99 2:00PM"

objAppt.Attendees.Add ("user2@domain")objAppt.Attendees.Add ("user2@domain")

Set objReq = objAppt.CreateRequestSet objReq = objAppt.CreateRequest

objReq.Message.SendobjReq.Message.Send

End SubEnd Sub

Page 67: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDO 3.0CDO 3.0

Dim aPerson as new PersonDim aPerson as new Person

Dim rs as RecordSetDim rs as RecordSet

Rs.open “Rs.open “file://./backofficestorage/dom/MBX/user/contacts””

rs.MoveFirstrs.MoveFirst

While NOT rs.EOFWhile NOT rs.EOF

aPerson.DataSource.Open rs.Fields(aPerson.DataSource.Open rs.Fields( “DAV:HREF”) “DAV:HREF”)

Debug.Print aPerson.FirstNameDebug.Print aPerson.FirstName

Debug.Print aPerson.LastNameDebug.Print aPerson.LastName

Debug.Print aPerson.MailingAddressDebug.Print aPerson.MailingAddress

rs.MoveNextrs.MoveNext

WendWend

Page 68: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDOSYSCDOSYS

Objektbibliothek basierend auf SMTP und NNTP Protokoll Standard• Wird mit Windows 2000 mitgeliefert

• CDOSYS = CDO 2.0

Features:• Programmatische Auswahl des SMTP Hosts

• Unterstützt Transport und Protokoll Events

• Erzeugen von MIME/MHTML Nachrichten

• ADO/OLEDB Unterstützung (Streams)

• Dual Interface

Mögliche Anwendungen:• Bulk Mail

• Mail basierte Replikation (z.b: Win2000 AD replication)

• Viren Checker (Mail und News), Auto forward, Admin Alert

• Spam Mail Erkennung (Sender, Scannen)

• Senden von Webseiten (Graphic, Links)

• Anhängen von Text an ausgehende Nachrichten (Transport)

Page 69: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDOSYSCDOSYS

Private Sub SimpleSend_Click()Dim myMailItem As New Message

With myMailItem .From = “[email protected]” .To = "[email protected]” .Subject = ”Here is the MS home page." . CreateMHTMLBody(“http://www.microsoft.com”,1) .SendEnd With

End Sub

Erzeugen und Versenden einer Nachricht mit einer Webseite als Body:

Page 70: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: CDOSYSDEMO: CDOSYS

„I Love you“ Email Scanner „I Love you“ Email Scanner

Page 71: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange 2000 EventsExchange 2000 Events

Store Events

• Innerhalb einer Operation (Syncron):• open, save, create, delete, move

• Benachrichtigung einer Operation (Asynchron):• save, create, delete, move, timer

• Systemzustände • Startup/Shutdow

• Workflow basieren auf Events

Page 72: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: Exchange 2000 Store EventsDEMO: Exchange 2000 Store Events

Abfangen eines Speichervorgangs in einem öffentlichen Ordner und Setzen von Rechten

Abfangen eines Speichervorgangs in einem öffentlichen Ordner und Setzen von Rechten

Page 73: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Workflow EngineWorkflow Engine

Besteht aus 2 Komponenten

• Workflow Engine • Evaluiert Bedingungen

• Führt Aktionen bei Statusübergangen aus

• Workflow Event Sink• Wird angesprungen, wenn Änderungen an

einem Item in einem Ordner auftreten

• Benutzt OnSyncSave, OnSyncDelete, OnTimer Store Events

• Validatiert Benutzer/Author Security

• Ruft die Workflow Engine

Page 74: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Workflow EngineWorkflow Engine

Workflow Process Definition

• Process Definition Elemente:• AuditTrailProvider

• CommonScriptURL

• Action Table

• Mode (security)

Page 75: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Workflow EngineWorkflow Engine

Workflow Action Table• Tabelle von Status-Übergängen

• Bedingungen und Aktionen sind VB Scripts

• Workflow Engine evaluiert die Bedingungen

• Workflow Engine führt Aktionen aus

AbsendenAbsenden GenehmigenGenehmigen

In BearbeitungIn Bearbeitung GenehmigtGenehmigt

AblehnenAblehnen

Page 76: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Workflow EngineWorkflow Engine

Workflow Engine Security

• Restricted Mode• Aktionen nur mit VB Script, “sandboxed”, kein

CreateObject(), Nur WorkflowSession Objekt kann benutzt werden

• Was kann im Restricted Mode gemacht werden ?• Properties des auslösenden Items modifizieren

• Mails versenden (WorkflowMessage)

• ACL auf das auslösende Item schreiben

• In AuditTrail (Logging) schreiben

Page 77: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Workflow EngineWorkflow Engine

Workflow Engine Security

• Privileged Mode• Aktionen können Script oder eigene COM

Objekte sein,

• Script Engine erlaubt CreateObject()

• Aktionen werden unter einem privilegierten NT account ausgeführt (in der Exchange Servers Gruppe)

• Was kann im Privileged Mode gemacht werden ? • Alles

Page 78: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: Workflow DesignerDEMO: Workflow Designer

Page 79: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

XML in Exchange 2000XML in Exchange 2000

Alles wird über XML definiert

• Schema

• Security

• Registrations

• Formular und Ansichten Rendering

• Datentypen

Page 80: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

WEBDAV / HTTPDAV ProtokollWEBDAV / HTTPDAV Protokoll

• HTTP 1.0 "read-only" Zugriff auf Dateien (GET Methode)

• HTTP 1.1 Einfaches Schreiben (PUT und DELETE Methode)

• HTTP-DAV ist eine Erweiterung des HTTP/1.1 Protokolls (RFC2518) • Dateisystem Operationen: MKCOL, COPY, MOVE,

LOCK, UNLOCK

• Manipulation von Properties: PROPFIND, PROPPATCH

• Suchen auf Resourcen: SEARCH

• (Die Exchange DAV-Engine implementiert ausserdem Replikation, Notifications, und Versioning)

Page 81: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

WEBDAV / HTTPDAV ProtokollWEBDAV / HTTPDAV Protokoll

Generelle Struktur von WEBDAV Anfragen

• Methode• Beschreibt Methode, die ausgeführt werden

soll

• Header• Beschreibt, wie die Aufgabe zu erledigen ist

• Body (optional)• Definiert die Daten, die in der Methode benutzt

werden, oder zusätzliche Anweisungen, wie die Methode ausgeführt werden soll

• Im Body wird XML verwendet.

Page 82: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

WEBDAV / HTTPDAV ProtokollWEBDAV / HTTPDAV Protokoll

Auslesen der Security eines DokumentsClient sendet:

PROPFIND http://myserver/mymessage.doc HTTP/1.1Host: myserverContent-type: text/xml; charset="utf-8“Content-Length: xxxx<?xml version="1.0" encoding="utf-8" ?>

<D:propfind xmlns:D="DAV:"> <D:prop xmlns:E=”http:/schemas.microsoft.com/exchange/”/> <E:ntsecuritydescriptor/> </D:prop></D:propfind>

Page 83: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO: WEBDAVDEMO: WEBDAV

Setzen von Security auf Nachrichten via WEBDAV und XML verpackt in XMLHTTP Object

Setzen von Security auf Nachrichten via WEBDAV und XML verpackt in XMLHTTP Object

Page 84: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

CDOEXMCDOEXM

CDO für Exchange Management CDOEXM erweitert CDO und ADSI mit

Management Interfaces

• IMailRecipient• Properties: Proxy addresses, Send/Deliver

Limits, Forwarding properties

• Methoden: Mail enable, mail disable

• IMailBoxStore• Properties: Store Quotas, Mailbox location,

Delegates

• Methoden: Create, delete and move mailbox

Page 85: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

DEMO:DEMO: CDOEXMCDOEXM

Setzen der Mailbox Quotas einer Exchange Mailbox

Setzen der Mailbox Quotas einer Exchange Mailbox

Page 86: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange SchemaExchange Schema

APP SCHEMASCR = “”BaseSchema = /APP TEMPLATE/APP TEMPLATE SCHEMA

APP SCHEMASCR = “”BaseSchema = /APP TEMPLATE/APP TEMPLATE SCHEMA

APP FOLDER (from template)SCR = “/APP SCHEMA”BaseSchema = “”

APP FOLDER (from template)SCR = “/APP SCHEMA”BaseSchema = “”

Workspace TemplateWorkspace Template

APP TEMPLATE SCHEMASCR = “”BaseSchema = “-EXSCHEMA V1-”

APP TEMPLATE SCHEMASCR = “”BaseSchema = “-EXSCHEMA V1-”

APP TEMPLATESCR = “/APP TEMPLATE SCHEMA”BaseSchema = “”

APP TEMPLATESCR = “/APP TEMPLATE SCHEMA”BaseSchema = “”

Application TLHApplication TLH

APP RESOURCESSCR = “”BaseSchema = “-EXSCHEMA V1-”

APP RESOURCESSCR = “”BaseSchema = “-EXSCHEMA V1-”

GLOBAL SCHEMA“-EXSCHEMA V1-”GLOBAL SCHEMA“-EXSCHEMA V1-”

PUBLIC FOLDER APPSCR = “/APP RESOURCES”BaseSchema = “”

PUBLIC FOLDER APPSCR = “/APP RESOURCES”BaseSchema = “”

NON_IPM_SUBTREE NON_IPM_SUBTREE

Page 87: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Intern

et In

ternet

Info

rmatio

n

Info

rmatio

n

Server

Server Store(s)Store(s)

Eigene Apps,Services, GatewaysEigene Apps,Services, Gateways

Client(s) wie z.B. Outlook, eigene Anwendungen, etc.Client(s) wie z.B. Outlook, eigene Anwendungen, etc.

Client Client Extension/Extension/COM-AddinCOM-Addin

DLLDLL

MAPIMAPI

CDO 3.0CDO 3.0

SystemSystem AttAtt..

Ac

tive

Ac

tive

Dire

cto

ryD

irec

toryMTAMTA

ADSIADSI

LD

AP

LD

AP

Event SvcEvent Svc

ScriptScript

MAPIMAPI

ServerServer

ClientClient

CDO 1.21CDO 1.21 CMCCMCS. MAPIS. MAPI

Addrb. P.Addrb. P.Store P.Store P. Trans. P.Trans. P. MAPIMAPISpoolerSpooler

MAPI/RPCMAPI/RPC

ICSICS

CDO 1.21CDO 1.21

ADSIADSIADOADO

OL

ED

BO

LE

DB

DA

V E

ng

ine

DA

V E

ng

ine

CDOEXMCDOEXMCDO 3.0CDO 3.0

CDOEXMCDOEXMInternet

SMTP, Pop3, etc.

Internet SMTP,

Pop3, etc. ADOADO

MSDAIPPMSDAIPP LDAP ProviderLDAP Provider

LDAP ProviderLDAP ProviderEvent ScriptEvent Script

AgentAgent

OW

A

X400 GWX400 GW

CDOSYSCDOSYS

CDOSYSCDOSYS

Überblick Exchange 2000 ArchitekturÜberblick Exchange 2000 Architektur

Page 88: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange FuturesExchange Futures

Exchange 2000 SP1

• Visual Studio Server Explorer für Web Storage System• Navigation

• Schema Editor

• Formular Registrierungen

• Event Registrierungen

• “Drag and drop” von Exchange Ordnern in den Designer

• Managed OLEDB Provider• Remotable

• Läuft im DTC Umfeld (Distributed Transaction)

Page 89: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Demo Visual StudioDemo Visual Studio

Visual Studio Webstorage System Visual Studio Webstorage System Server Explorer ExtensionServer Explorer Extension

Visual Studio Webstorage System Visual Studio Webstorage System Server Explorer ExtensionServer Explorer Extension

Page 90: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Exchange FuturesExchange Futures

Exchange 2000 und .NETExchange 2000 und .NET

• CDO.NET Klassen

• Managed Provider• Remotable

• Transaktionsfähig

• In DTC integriert

• ADO DataSet

• XmlDataDocumentXmlDataDocument

Page 91: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

ZusammenfassungZusammenfassung

Server• Strategie geht Richtung einheitlichen

Datenzugriff auf alle Datenbanken via ADO/OLEDB

• Server Management = Directory Zugriff via ADSI/LDAP

Client• Strategie geht Richtung XML/HTTP-DAV

• WebForms rendern HMTL, je nach Fähigkeit des Clients

• Ziel ist es alle Arten von Devices zu unterstützen

Page 92: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

WeitereWeitere Info’s?Info’s?

Exchange 2000 Resources:• msdn.microsoft.com/exchange

• www.microsoft.com/exchange/trainevents/MEC00.htm

• msdn.microsoft.com/library/techart/buildingsolutions.htm

• msdn.microsoft.com/training/seminars/WebDev.asp#exchange

Externe Exchange Infos, Tools, etc.:• www.exchangestuff.com/

• www.slipstick.com/index.htm

RFC’s: • www.gt.ed.net/mailmen/technical/

Page 93: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

WeitereWeitere Info’s?Info’s?

Bücher• Programming Microsoft® Outlook® and Microsoft

Exchange, Thomas Rizzo, MSPress

• Programming WebStore Applications with Microsoft Exchange 2000 Server, Mindy Martin, MSPress

msdn quickie• www.microsoft.com/germany/msdn/quickie

msdn TechTalk-Newsgroup• news://msnews.microsoft.com/microsoft.public.de.german.techtalk

Page 94: Exchange2000 Exchange 2000Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH.

Fragen!?Fragen!?

Uff...Uff...

[email protected]@microsoft.com