HOWTO: Send Rich Text Formatted E-Mail from Visual Fox Pro Using CDOID: Q231574
|
This article describes how to use Microsoft's Collaboration Data Objects (CDO) library from Visual FoxPro to send an e-mail message with a rich text formatted (RTF) message body.
The following Visual FoxPro code sample sends an e-mail message with an RTF formatted message body.
Q171440 Where to Acquire the Collaboration Data Objects LibrariesThis article also makes use of a function (writertf) provided in a DLL (Mapirtf.dll) delivered in a second article:
Q172038 DLL to Read and Write RTF with Active Messaging(CDO was formerly named Active Messaging).
* Send RTF E-Mail from VFP
* -----------------------
* Put Mapirtf.dll in the current directory, or Windows\System directory
* (for Windows 95) or the Winnt\System32 directory (for Windows NT).
Declare INTEGER writertf IN mapirtf.dll;
STRING ProfileName, STRING MessageID,;
STRING StoreID, STRING cText
Declare INTEGER readrtf IN mapirtf.dll;
STRING ProfileName, STRING SrcMsgID,;
STRING SrcStoreID, STRING MsgRTF
objSession = CREATEOBJECT("mapi.session")
objSession.Logon
*Create a new message in the Outbox
objMessage = objSession.Outbox.Messages.Add
*Set the Subject and Add a Recipient
objMessage.Subject = "This is the message subject"
objRecip = objMessage.Recipients.Add
objRecip.name = "My_Recip_Here" && <<--Your Recipients email name here
objRecip.Resolve
*Write the message to the store in order to acquire then
*retrieve a MessageID
objMessage.Update
MsgID = objMessage.ID
*Write the RTF, passing the saved MessageID, StoreID, and the
*RTF Stream to the function.
*
*Note - The RichEdit Control that ships with VF does not expose the
* RTF Stream - just plain text. You will need to either use an
* alternate RTF Control that exposes the RTF Stream, or read
* the RTF from a file, etc. The following line of code loads
* an RTF Stream from file into the vRTFStream variable.
*
*For testing purposes, try reading the contents of a file saved
*in an RTF format from MS-Word into the variable, alternately you
*will need to find an RTF control that exposes the RTF stream as
*a property of the control:
vRTFStream = FILETOSTR(GETFILE("RTF",;
"",;
"Read this File",;
0,;
"Select an RTF Source File"))
*The writertf() function is in the MAPIRTF.DLL from Q172038
intRetVal = writertf(objSession.Name,;
objMessage.ID,;
objMessage.StoreID,;
vRTFStream)
IF intRetVal <> 0 THEN
MESSAGEBOX("Write RTF to Message >> Failed <<")
ELSE
MESSAGEBOX("Write RTF to Message >> Succeeded <<")
ENDIF
*Because the object has changed, we must re-acquire our Message...
*First clear our current variable
RELEASE objMessage
*Next set a filter on the outbox for our Message ID
objMessageColl = objSession.Outbox.Messages
objMessageFilter = objMessageColl.Filter
objMessageFilter.Fields.Add(0x0FFF0102, MsgID)
objMessage = objMessageColl.GetFirst
*Send it
objMessage.Send
*Clean up then exit
objSession.Logoff
RELEASE objRecip, objMessage, objSession
*EOP: VF_CDO_RTF.PRG
For additional information on how to effectively use CDO, see the Microsoft Knowledge Base articles and the Microsoft Developer Network (MSDN). Both are great resources, containing a substantial number of additional articles on how to make use of CDO. To find these articles, query on "CDO" or "Active Messaging."
Additional query words: kbActMsg kbCDO kbCDO110 kbCDO120 kbCDO121 kbMsg kbGrpMsg kbDSupport kbVFp
Keywords : kbActMsg kbCDO kbCDO110 kbCDO120 kbCDO121 kbMsg kbVFp kbGrpMsg kbDSupport
Version : WINDOWS:1.1,1.2,1.21
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: June 9, 1999