Sending a Meeting Request
Topic Last Modified: 2007-05-10
A meeting request is a message sent by the meeting organizer to invite other users to a meeting. A meeting request contains a description of the meeting, including the start time, end time, and location. Collaboration Data Objects (CDO) creates a meeting request from an Appointment object by using the IAppointment.CreateRequest method.
To send a meeting request
- Create or open an Appointment object.
- Add attendees to the meeting by adding Attendee objects to the Appointment's Attendees collection.
- Save the Appointment to the organizer's calendar (optional).
- Create a CalendarMessage object using the IAppointment.CreateRequest method.
- Send the message requesting that the users attend the meeting.
Note
By default, calendar messages are sent by using the SMTP pick-up directory.
This topic contains Microsoft® Visual Basic®, Microsoft Visual C++®, Microsoft C#, and Visual Basic .NET code examples.
Example
Visual Basic
The following example shows how to add attendees to an appointment and send a meeting request to the specified users.
' Reference to Microsoft ActiveX Data Objects 2.5 Library
' Reference to Microsoft CDO for Exchange 2000 Library
' Note: It is recommended that all input parameters be validated when they are
' first obtained from the user or user interface.
Sub SendMeetingRequest(iAppt As CDO.Appointment, _
iMbx As IMailbox, _
strAttnMandatory() As String, _
strAttnOptional() As String)
Dim iCalMsg As CalendarMessage
Dim Config As New Configuration
Dim iAttendee As New Attendee
Dim iPers As CDO.Person
'Set the configuration fields
Set iPers = iMbx
Config(cdoSendEmailAddress) = iPers.Email
Config(cdoMailboxURL) = iMbx.BaseFolder
Config.Fields.Update
With iAppt
.Configuration = Config
'Add attendees
Dim I As Long
For I = LBound(strAttnMandatory) To UBound(strAttnMandatory)
Debug.Print "Mandatory Attendee E-Mail:" & strAttnMandatory(I)
Set iAttendee = .Attendees.Add
iAttendee.Address = CStr(strAttnMandatory(I))
iAttendee.Role = cdoRequiredParticipant
Next I
For I = LBound(strAttnOptional) To UBound(strAttnOptional)
Debug.Print "Optional Attendee E-Mail:" & strAttnOptional(I)
Set iAttendee = .Attendees.Add
iAttendee.Address = CStr(strAttnOptional(I))
iAttendee.Role = cdoOptionalParticipant
Next I
'Create the calendar message and send it
Set iCalMsg = .CreateRequest
'Save these changes to the appointment
.DataSource.Save
iCalMsg.Message.Send
End With
End Sub
C++
The following example shows how to add attendees to an appointment and send a meeting request to the specified users.
/*
Assume that the following paths are in your
INCLUDE path.
%CommonProgramFiles%\system\ado
%CommonProgramFiles%\microsoft shared\cdo
*/
#import <msado15.dll> no_namespace
#import <cdoex.dll> no_namespace
#include <iostream.h>
#include <vector>
using namespace std;
// Note: It is recommended that all input parameters be validated when they are
// first obtained from the user or user interface.
void sendMeetingRequest(
IAppointmentPtr& iAppt,
IMailboxPtr& iMbx,
vector<bstr_t>& AttnMand,
vector<bstr_t>& AttnOpt
) {
ICalendarMessagePtr iCalMsg(__uuidof(CalendarMessage));
IConfigurationPtr iConf(__uuidof(Configuration));
IAttendeePtr iAttn;
IPersonPtr iPer;
try {
iPer = iMbx;
}
catch(_com_error e ) {
cerr << "Invalid or unbound Person object reference passed. " << endl;
_com_issue_error(E_INVALIDARG);
}
iConf->Fields->Item[cdoSendEmailAddress]->Value = variant_t(iPer->Email);
iConf->Fields->Item[cdoMailboxURL]->Value = variant_t(iMbx->BaseFolder);
iConf->Fields->Update();
iAppt->Configuration = iConf;
typedef vector<bstr_t>::const_iterator CI;
for(CI p = AttnMand.begin(); p != AttnMand.end(); p++) {
iAttn = iAppt->Attendees->Add(bstr_t());
iAttn->Address = _bstr_t(*p);
iAttn->Role = cdoRequiredParticipant;
cout << "Added " << bstr_t(*p) << " as required attendee to meeting" << endl;
}
for(p = AttnOpt.begin(); p != AttnOpt.end(); p++) {
iAttn = iAppt->Attendees->Add(bstr_t());
iAttn->Address = _bstr_t(*p);
iAttn->Role = cdoOptionalParticipant;
cout << "Added " << bstr_t(*p) << " as optional attendee to meeting" << endl;
}
try {
iCalMsg = iAppt->CreateRequest();
iCalMsg->Message->Send();
}
catch(_com_error e) {
cerr << "Error creating and sending request" << endl;
throw e;
}
try {
iAppt->DataSource->Save();
}
catch(_com_error e) {
cerr << "Error saving appointment!" << endl;
throw e;
}
}
C#
The following example shows how to add attendees to an appointment and send a meeting request to the specified users.
// Reference to Microsoft ActiveX Data Objects 2.5 Library
// Reference to Microsoft CDO for Exchange 2000 Library
// Reference to Active DS Type Library
// Note: It is recommended that all input parameters be validated when they are
// first obtained from the user or user interface.
static void SendMeetingRequest(CDO.Appointment iAppt, CDO.IMailbox iMbx,
string[] strAttnMandatory, string[] strAttnOptional)
{
try
{
// Variables.
CDO.CalendarMessage iCalMsg;
CDO.Configuration Config = new CDO.Configuration();
CDO.Attendee iAttendee = new CDO.Attendee();
CDO.Person iPers = new CDO.Person();
// Set the configuration fields.
iPers = (CDO.Person)iMbx;
Config.Fields[CDO.CdoConfiguration.cdoSendEmailAddress].Value = iPers.Email;
Config.Fields[CDO.CdoConfiguration.cdoMailboxURL].Value = iMbx.BaseFolder;
Config.Fields.Update();
iAppt.Configuration = Config;
// Add required attendee(s).
long I;
for (I = 0; I <= (strAttnMandatory.Length() - 1) ; ++I)
{
Console.WriteLine("Mandatory Attendee E-Mail:" + strAttnMandatory[I]);
iAttendee = iAppt.Attendees.Add("");
iAttendee.Address = Convert.ToString(strAttnMandatory[I]);
iAttendee.Role = CDO.CdoAttendeeRoleValues.cdoRequiredParticipant;
}
// Add optional attendee(s).
for (I = 0; I <= (strAttnOptional.Length() - 1); ++I)
{
Console.WriteLine("Optional Attendee E-Mail:" + strAttnOptional[I]);
iAttendee = iAppt.Attendees.Add("");
iAttendee.Address = Convert.ToString(strAttnOptional[I]);
iAttendee.Role = CDO.CdoAttendeeRoleValues.cdoOptionalParticipant;
}
// Create the calendar message.
iCalMsg = iAppt.CreateRequest();
// Save these changes to the appointment.
iAppt.DataSource.Save();
// Send the calendar message.
iCalMsg.Message.Send();
Console.WriteLine("Meeting request sent.");
}
catch (Exception err)
{
Console.WriteLine(err.ToString());
}
}
Visual Basic .NET
The following example shows how to add attendees to an appointment and send a meeting request to the specified users.
' Reference to Microsoft ActiveX Data Objects 2.5 Library
' Reference to Microsoft CDO for Exchange 2000 Library
' Reference to Active DS Type Library
' Note: It is recommended that all input parameters be validated when they are
' first obtained from the user or user interface.
Sub SendMeetingRequest(ByVal iAppt As CDO.Appointment, _
ByVal iMbx As CDO.IMailbox, _
ByVal strAttnMandatory() As Object, _
ByVal strAttnOptional() As Object)
Try
' Variables.
Dim iCalMsg As CDO.CalendarMessage
Dim Config As New CDO.Configuration()
Dim iAttendee As New CDO.Attendee()
Dim iPers As CDO.Person
' Set the configuration fields.
iPers = iMbx
Config(CDO.CdoConfiguration.cdoSendEmailAddress).Value = iPers.Email
Config(CDO.CdoConfiguration.cdoMailboxURL).Value = iMbx.BaseFolder
Config.Fields.Update()
With iAppt
.Configuration = Config
' Add required attendee(s).
Dim I As Long
For I = LBound(strAttnMandatory) To UBound(strAttnMandatory)
Console.WriteLine("Mandatory Attendee E-Mail:" & strAttnMandatory(I))
iAttendee = .Attendees.Add
iAttendee.Address = CStr(strAttnMandatory(I))
iAttendee.Role = CDO.CdoAttendeeRoleValues.cdoRequiredParticipant
Next I
' Add optional attendee(s).
For I = LBound(strAttnOptional) To UBound(strAttnOptional)
Console.WriteLine("Optional Attendee E-Mail:" & strAttnOptional(I))
iAttendee = .Attendees.Add
iAttendee.Address = CStr(strAttnOptional(I))
iAttendee.Role = CDO.CdoAttendeeRoleValues.cdoOptionalParticipant
Next I
' Create the calendar message.
iCalMsg = .CreateRequest
' Save these changes to the appointment.
.DataSource.Save()
' Send the meeting request.
iCalMsg.Message.Send()
Console.WriteLine("Meeting request sent.")
End With
Catch err As Exception
Console.WriteLine(err.ToString())
End Try
End Sub