Message CoClass
Message CoClass
This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release. Defines an object that represents a message.
CLSID
CD000001-8B95-11D1-82DB-00C04FB1625D
ProgID
CDO.Message
Type Library
Microsoft CDO for Windows 2000 Library
Microsoft CDO for Exchange 2000 Library
Inproc Server
CDOSYS.DLL, CDOEX.DLL
Threading Model
Both
Implemented Interfaces
Supported Bindings
The following table lists IDataSource interface bindings.
Method Target Argument Content Class Open Exchange store item URL urn:content-classes:calendarmessage OpenObject IRow _Record IStream _Stream IBodyPart urn:content-classes:calendarmessage SaveTo Exchange store item URL N/A SaveToContainer Exchange store folder URL N/A SaveToObject IRow _Record IStream _Stream IBodyPart N/A
Remarks
An instance of the Message Component Object Model (COM) class represents a message. The primary and default interface on Message objects is the IMessage Interface. You can use this interface to access the messaging-specific functionality of the object, including addressing the message, adding content, sending, posting, or responding to the message.
Messages contain a set of message headers that contain information, such as to whom the message is to be sent, to whom carbon copies are to be sent, and so forth. The most common message header fields are present as properties on the IMessage interface, and all of these fields are accessible using the Fields collection of the Message object. All fields reside in some namespace, such as urn:schemas:mailheader, for the purpose of rendering them unique. In other words, when you are accessing the field in the Fields collection, you must use the fully qualified name of the field, such as urn:schemas:mailheader:subject for the message subject or urn:schemas:httpmail:textdescription for the text/plain part of the message.
The IMessage interface provides a set of top-level methods and properties designed to make creating the most common message content straightforward and intuitive. Such methods include CreateMHTMLBody, AddBodyPart, and AddAttachment. Properties include TextBody and HTMLBody.
For Multipurpose Internet Mail Extensions (MIME)-formatted messages, the Message object acts as the root body part of the MIME body part hierarchy. This functionality is provided through the exposed IBodyPart interface on the object. The IMessage interface provides the BodyPart property that returns this interface on the object. You can use BodyPart, the Getinterface method, or standard mechanisms such as Set (in Microsoft® Visual Basic®) and Queryinterface (in C++) to navigate to this interface.
To facilitate the easy transfer of message data to and from other objects, the Message object provides an implementation of the IDataSource interface. Using methods and properties on this interface, you can access embedded messages in other messages, and embed messages in other messages. The IMessage interface provides the DataSource property to allow navigating to the IDataSource interface on the object.
Collaboration Data Objects (CDO) messaging has additional capabilities with Microsoft Exchange Server 2003. To send messages using Exchange (through the Exchange mail submission URI), you set the http://schemas.microsoft.com/cdo/configuration/sendusing field to cdoSendUsingExchange in the Configuration object of the Message object. Similarly, you set the http://schemas.microsoft.com/cdo/configuration/postusing field to cdoPostUsingExchange to post using Exchange.
When you send or post messages using Exchange, Collaboration Data Objects (CDO) needs a connection to the user's Exchange mailbox. You can specify the URL to the user's mailbox folder using the http://schemas.microsoft.com/cdo/configuration/mailboxurl property in the Configuration object of the Message object. If you do not specify the URL, CDO searches Microsoft Active Directory® for the necessary information to construct this URL using the user principal name found in the http://schemas.microsoft.com/cdo/configuration/sendusername or http://schemas.microsoft.com/cdo/configuration/postusername configuration fields.
The data source of the Message object is changed when you send or post messages using Exchange. If the object was previously bound to an item in the Exchange store, that binding is lost. You can override this behavior by specifying an open Connection object in the http://schemas.microsoft.com/cdo/configuration/activeconnection configuration field. If this object reference is present in the Configuration Fields collection, this Connection object is used to send or post the message. If the Connection object is not open and bound to the user's mailbox before the message is sent, CDO generates an error. If you want to send the message within a transaction, you must start and commit it manually using the referenced Connection object.
You can post directly to a public folder by specifying the URL of the folder in the http://schemas.microsoft.com/exchange/hardlinklist property. Although this field is multivalued, you can only specify one folder URL.
Note There is a difference between saving a message to a folder and posting to a folder. Posting sets property values such as the post date and performs validations. You can examine the X-Unsent field to determine if a particular message was posted.
Examples
[Visual Basic] ' Reference to Microsoft CDO for Exchange 2000 Library ' Reference to ActiveX Data Objects 2.5 Library ' Reference to Active DS Type Library Sub Main() Dim Info As New ADSystemInfo Dim InfoNT As New WinNTSystemInfo Dim iPer As New CDO.Person Dim sTo As String Dim sFrom As String Dim sSubject As String Dim sText As String sTo = InfoNT.UserName & "@" & Info.DomainDNSName sFrom = sTo sSubject = "Subject" sText = "Text of message." iPer.DataSource.Open "LDAP://" & Info.UserName Dim iMbx As CDO.IMailbox Set iMbx = iPer SendMessageUsingExchange sTo, sFrom, sSubject, sText, iMbx.BaseFolder End Sub Sub SendMessageUsingExchange(sTo As String, sFrom As String, sSubject As String, sText As String, sMailboxURL As String) Dim iMsg As New CDO.Message Dim iBp As CDO.IBodyPart Dim Flds As ADODB.Fields Dim Conn As New ADODB.Connection Dim Stm As ADODB.Stream Conn.Provider = "ExOLEDB.DataSource" Conn.Open sMailboxURL Dim iConf As New CDO.Configuration Set Flds = iConf.Fields Flds(cdoSendUsingMethod) = cdoSendUsingExchange Flds(cdoMailboxURL) = sMailboxURL Flds(cdoActiveConnection) = Conn Flds.Update With iMsg Set .Configuration = iConf .To = sTo .From = sFrom .Subject = sSubject .TextBody = sText Set iBp = .AddAttachment("c:\wordfile.doc") Set Stm = .GetStream Stm.SaveToFile "c:\mysavedmessage.eml", adSaveCreateOverWrite .Send End With ' Clean up. Conn.Close Stm.Close Set Conn = Nothing Set Stm = Nothing End SubVBScript
<Job id="sendselfmessage"> <reference object="cdo.message"/> <reference object="adodb.connection"/> <script language="VBScript"> Dim Info Set Info = CreateObject("ADSystemInfo") Dim InfoNT Set InfoNT = CreateObject("WinNTSystemInfo") sTo = InfoNT.UserName & "@" & Info.DomainDNSName sFrom = sTo sSubject = "Subject" sText = "Text of message." Dim iPer Set iPer = CreateObject("CDO.Person") iPer.DataSource.Open "LDAP://" & Info.UserName Dim iMbx Set iMbx = iPer.Getinterface("IMailbox") SendMessageUsingExchange sTo, sFrom, sSubject, sText, iMbx.BaseFolder Sub SendMessageUsingExchange( sTo, sFrom, sSubject, sText, sMailboxURL) Dim iMsg Set iMsg = CreateObject("CDO.Message") Dim iBp Dim Flds Dim Conn Dim Stm Set Conn = CreateObject("ADODB.Connection") Conn.Provider = "ExOLEDB.DataSource" Conn.Open sMailboxURL Dim iConf Set iConf = CreateObject("CDO.Configuration") Set Flds = iConf.Fields Flds(cdoSendUsingMethod) = cdoSendUsingExchange Flds(cdoMailboxURL) = sMailboxURL Flds(cdoActiveConnection) = Conn Flds.Update With iMsg Set .Configuration = iConf .To = sTo .From = sFrom .Subject = sSubject .TextBody = sText Set iBp = .AddAttachment("c:\wordfile.doc") Set Stm = .GetStream ' Note: using adSaveCreateOverWrite may overwrite an existing item of the same name. Stm.SaveToFile "c:\mysavedmessage.eml", adSaveCreateOverWrite .Send End With ' Clean up. Conn.Close Stm.Close Set Conn = Nothing Set Stm = Nothing End Sub </script> </Job>
[C++] // You must have the following paths in your // include path: // %CommonProgramFiles%\system\ado // %CommonProgramFiles%\microsoft shared\cdo // // Import the type libraries into the project: // #import <msado15.dll> no_namespace raw_interfaces_only // #import <cdoex.dll> no_namespace raw_interfaces_only #ifndef _CORE_EXAMPLE_HEADERS_INCLUDED #define _CORE_EXAMPLE_HEADERS_INCLUDED #import <msado15.dll> no_namespace #import <cdoex.dll> no_namespace #include <iostream.h> #endif IMessagePtr CreateSampleMessage2() { IMessagePtr pmsg(__uuidof(Message)); IBodyPartPtr bp; IConfigurationPtr config(__uuidof(Configuration)); FieldsPtr flds; FieldPtr fld; _StreamPtr stm; _bstr_t bstrEmpty(""); pmsg->To = "\"Some One\" <someone@example.com>, \"Another\" <another@example.com>"; pmsg->From = "\"ThirdPerson\" <thirdperson@example.com>, \"Fourth\" <fourth@example.com>"; pmsg->Sender = "\"Finally\" <finally@example.com>"; pmsg->Subject = "A really cool message."; // Get the current directory so that relative paths // can be expanded. This is necessary for AddAttachment. LPTSTR buf = NULL; DWORD buflen = 0; _bstr_t path; if( ( buflen = GetCurrentDirectory(buflen,NULL) ) > 0 ) { buf = new TCHAR[buflen+1]; GetCurrentDirectory(buflen+1,buf); path = buf; delete [] buf; } else { cerr << "Error getting current directory" << endl;; throw _com_error(GetLastError()); } try { bp = pmsg->AddAttachment(path + _bstr_t("\\..\\misc\\wordfile.doc"), bstrEmpty, bstrEmpty); bp->Fields->Item["urn:schemas:mailheader:content-type"]->Value = variant_t("application/msword"); bp->Fields->Update(); bp = pmsg->AddAttachment(path + _bstr_t("\\..\\misc\\message2.eml"), bstrEmpty, bstrEmpty); bp->Fields->Item["urn:schemas:mailheader:content-type"]->Value = _variant_t("message/rfc822"); bp->Fields->Update(); pmsg->CreateMHTMLBody(_bstr_t("http://www.example.com"),cdoSuppressAll,_bstr_t(""),_bstr_t("")); } catch(_com_error e) { cerr << "Error creating sample message!" << endl; throw e; } // Save a copy to the local file system. stm = pmsg->GetStream(); // Note: using adSaveCreateOverWrite may overwrite an existing item of the same name. stm->SaveToFile(_bstr_t("savemymessage.eml"),adSaveCreateOverWrite); // Clean up. stm->Close(); return pmsg; }