Emails versturen met Redemption (RDO)

Met RDO (Redemption Objects) is het mogelijk om mails, afspraken, taken e.d. te versturen zonder daarbij Outlook te gebruiken. Dit doe je namelijk door direct de Exchange server aan te spreken. Voor je gebruik kunt maken van RDO moet je eerst even de assembly downloaden (http://www.dimastr.com/redemption/). Nadat je heb hem gedownload heb, even installeren in als reference toevoegen in je Visual Studio project.

Dit blog is meer bedoeld om wat achtergrondinformatie te verkrijgen over het Outlook object model waar RDO op gebaseerd is / gebruik van maakt. Eerst maar even wat kreten nader uitleggen:

MAPI
Staat voor Messaging Application Programming Interface en is in samenwerking met meer dan 100 ontwikkelaars tot stand gekomen. MAPI is object georienteerd en gebruikt Microsofts Component Object Model (COM) om instanties te laten maken van objecten.

Service Providers
Dit zijn is de backend van een messaging systeem. Client applicaties maken gebruik van service providers om berichten (messages) aan te maken, te versturen, op te slaan en om e-mails te ontvangen. Er zijn drie soorten service providers:
  1. Message store
  2. Een message store gedraagt zich als een interface tussen een data opslag systeem en een (MAPI gebaseerde) client. Het mechanisme dat wordt gebruikt om de data op te slaan is niet gespecificeerd (de data kan worden opgeslagen in een database, tekstbestand of wat anders). Een message is een object met verschillende properties, zoals onderwerp, body, etc. Alle uitgaande berichten (messages) worden aangemaakt in een message store voordat ze worden overgedragen naar een transport provider voor verzending.

  3. Transport
  4. Een transport provider gedraagt zich als een interface tussen een message transportatie machanisme en een (MAPI gebaseerde) client. In het geval van message stores is het mechanisme dat de data daadwerkelijk verplaatst niet relevant. Alleen de transport provider zelf hoeft dat te weten.

  5. Address Book
  6. Een address book provider gedraagt zich als een interface tussen databasr met gebruikersinformatie en een (MAPI gebaseerde) client. Nogmaals, het mechanisme voor data opslag is niet gespecificeerd. Address book providers staat het toe client applicaties te laten zoeken naar messaging gebruikersingformatie.
MAPI Subsystem
het MAPI Subsystem is de interface tussen de client applicaties en service providers. Wanneer een client applicatie toegang nodig heeft tot een service, vraagt deze dat aan de MAPI Subsystem. Het MAPI Subsystem communiceert dan met de geschikte service provider namens de client applicatie. Het MAPI Subsystem is de lijm die de service provider verbindt met de client application.

MAPI Objects
Zoals gezegd is MAPI object georienteerd. Het bevat data structuren voor emails (berichten), mappen, message stores, adresboeken, ontvangers, etc. Deze data structuren hebben properties die de status van het object representeren en methods die de acties uitvoeren. Technologien die gebaseerd zijn op MAPI, zoals CDO en RDO, gebruiken MAPI services om MAPI objecten te verkrijgen, om vervolgens de properties te lezen en setten en de methods aan te roepen.

MAPI Session
Een session (sessie) is de tijd waarin MAPI services worden gebruikt. Om een sessie te starten moet de client applicatie eerst inloggen in MAPI. Nadat een verbinding is opgezet kan de client applicatie gebruik maken van de MAPI services. Op het moment dat de client applicatie klaar is met MAPI moet deze zich uitloggen, de sessie eindigt dan dus.

IPM
Alle MAPI berichten (messages) hebben een message class. Dit is een string die aangeeft wat voor bericht het is. De meest gebruikelijke message class is IPM.Note, welke duidt op een algemeen e-mail bericht. IPM staat voor InterPersonal Message. De meeste messages (berichten) die een client applicatie verstuurd en ontvangt zijn van het type IPM message class. IPM zijn berichten die bedoeld zijn om door mensen te worden gelezen in plaats voor de programmatuur van de computer. Het type bericht wordt bepaald door een subclass van IPM. De subclass erft van IPM. De subclasses geven aan met wat voor soort bericht er gewerkt wordt. Zo beschrijft IPM.Note een e-mail en IPM.Contact een contact bericht.

Codevoorbeeld
Tot slot even een stukje code om een e-mail te versturen met RDO:


RDOSessionClass rdoSession = new RDOSessionClass();
rdoSession.LogonExchangeMailbox("username", "server");

// Create mail object and send mail
RDOMailClass m = (RDOMailClass)rdoSession.
GetSharedDefaultFolder("username", rdoDefaultFolders.olFolderInbox).
Items.Add("IPM.Note");
m.Recipients.Add("ontvanger");
m.Recipients.ResolveAll(null, null);
m.Subject = "onderwerp";
m.Body = "inhoud e-mail bericht";
m.SenderEmailAddress = "afzender";
m.MarkRead(true);
m.Send();

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren