Using CDO for Exchange with .NET is straightforward. You just add your references to the CDO library and then start coding. The following sample connects to a public folder and creates a new post in the folder. Then it creates a new appointment in the user 's mailbox. It is shown in Visual Basic .NET.
Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " #End Region Private Sub cmdGo_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmdGo.Click 'Show how to use CDO for Exchange with VB.NET 'Open a public folder 'Create a new post in the public folder Dim strURL As String = "http://thomrizwin2k/public/test/" Dim strMailBoxURL As String = _ "http://thomrizwin2k/exchange/thomriz/calendar/" Dim oFolder As New CDO.Folder() 'To make sure we use EXOLEDB, pass a new connection object to 'the open call Dim oConnection As New ADODB.Connection() oConnection.Provider = "EXOLEDB.DataSource " oConnection.ConnectionString = strURL oConnection.Open() oFolder.DataSource.Open(strURL, oConnection, _ ADODB.ConnectModeEnum.adModeReadWrite) MsgBox(oFolder.DisplayName & " has " & oFolder.ItemCount & " items.") 'Add a new item to the folder Dim oItem As New CDO.Item() oItem.ContentClass = "urn:content-classes:message" oItem.Fields("urn:schemas:httpmail:subject").Value = "My New Post" oItem.Fields("urn:schemas:httpmail:textdescription").Value = _ "New Message Body" oItem.Fields("http://schemas.microsoft.com/exchange/" & _ "outlookmessageclass").Value = "IPM.Post" oItem.Fields.Update() oItem.DataSource.SaveToContainer(strURL, oConnection) 'Create a new appointment as well Dim oAppt As New CDO.Appointment() 'Need to create a new Connection object to the 'mailbox store Dim oConnectionMailbox As New ADODB.Connection() oConnectionMailbox.Provider = "EXOLEDB.DataSource " oConnectionMailbox.ConnectionString = strMailBoxURL oConnectionMailbox.Open() oAppt.Subject = "My New Appointment" oAppt.StartTime = "1/23/2003 10:00 AM" oAppt.EndTime = "1/23/2003 11:00 AM" oAppt.Location = "Building 34" oAppt.TextBody = "This is the body of an appointment." oAppt.Fields("http://schemas.microsoft.com/exchange/" & _ "outlookmessageclass").Value = "IPM.Appointment" oAppt.Fields.Update() oAppt.DataSource.SaveToContainer(strMailBoxURL, oConnectionMailbox) oConnection.Close() oConnectionMailbox.Close() End Sub End Class
Here is a scaled-down C# version of the sample:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using CDO; namespace CDOEx2kCSharp { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button cmdGo; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code . . . #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void cmdGo_Click(object sender, System.EventArgs e) { string strURL = "http://thomrizwin2k/public/test"; CDO.Folder oFolder = new CDO.Folder(); ADODB.Connection oConnection = new ADODB.Connection(); oConnection.Provider = "EXOLEDB.DataSource "; oConnection.ConnectionString = strURL; oConnection.Open(oConnection.ConnectionString,"","",0); oFolder.DataSource.Open(strURL, oConnection, ADODB.ConnectModeEnum.adModeReadWrite, ADODB.RecordCreateOptionsEnum.adFailIfNotExists, ADODB.RecordOpenOptionsEnum.adOpenSource, "", ""); MessageBox.Show(oFolder.DisplayName + " has " + oFolder.ItemCount + " items."); //Add a new item CDO.Item oItem = new CDO.ItemClass(); oItem.ContentClass = "urn:content-classes:message"; oItem.Fields["urn:schemas:httpmail:subject"].Value = "My New C# Post"; oItem.Fields["urn:schemas:httpmail:textdescription"].Value = "New Message Body"; oItem.Fields["http://schemas.microsoft.com/" + "exchange/outlookmessageclass"].Value = "IPM.Post"; oItem.Fields.Update(); oItem.DataSource.SaveToContainer(strURL, oConnection, ADODB.ConnectModeEnum.adModeReadWrite, ADODB.RecordCreateOptionsEnum.adCreateNonCollection, ADODB.RecordOpenOptionsEnum.adOpenSource, "", ""); oConnection.Close(); } } }