Howto: CDOSYS/C# Sending an ICS file
Todo:
1) Open an appointment in Outlook. Save to file as an .ICS file.
2) Create a C# project and add the code below.
3) Do the TODO sections.
'TODO: Add a refernce to CDOSYS
using System.IO;
private void btnSendUsingIcs_Click(object sender, System.EventArgs e)
{
string sFrom = "me@mycompany.com"; // TODO: Change
string sTo = "me@mycompany.com"; // TODO: Change
string sSubject = "This is my cal test"; // TODO: Change
string sBody = "This is the test body"; // TODO: Change
string sFile = "C:\\Inetpub\\wwwroot\\CSharpSendVcalEmail\\Myrecurringappt.ics"; // TODO:
Change
SendMessageWithICalFile(sFrom, sTo, sSubject, sBody, sFile);
}
public void SendMessageWithICalFile(string sFrom, string sTo, string sSubject, string sBody, string
sIcalPath)
{
// 'TO DO: Change these constants to match your environment
string strSMTPSERVER = "SMTPhost"; // TODO: Change
CDO.Message iMsg;
CDO.IBodyPart iBpMsg;
CDO.IBodyPart iBp1;
ADODB.Fields Flds;
ADODB.Stream Stm;
iMsg = new CDO.Message();
//Get IBodyPart on the Message object
iBpMsg = iMsg.BodyPart;
Flds = iBpMsg.Fields;
Flds["urn:schemas:mailheader:Content-Type"].Value = "multipart/mixed";
Flds.Update();
//TEXT BODYPART
// Add the body part for the text/plain part of message
iBp1 = iBpMsg.AddBodyPart(-1);
// set the fields here
Flds = iBp1.Fields;
Flds["urn:schemas:mailheader:content-type"].Value = "text/plain; charset=\"iso-8859-1\"";
//Flds["urn:schemas:mailheader:Content-Transfer-Encoding"].Value = "quoted-printable";
Flds.Update();
//get the stream and add the message
Stm = iBp1.GetDecodedContentStream();
Stm.WriteText ("this is the message in text format", ADODB.StreamWriteEnum.stWriteLine);
Stm.Flush();
iBp1 = iBpMsg.AddBodyPart(-1);
// set the content-type field here
Flds = iBp1.Fields;
Flds["urn:schemas:mailheader:Content-Type"].Value = "text/calendar";
Flds.Update();
Stm = iBp1.GetDecodedContentStream();
Stm.LoadFromFile(sIcalPath);
Stm.Flush();
Flds = iBp1.Fields;
//Flds["urn:schemas:mailheader:Content-Type"].Value = "text/calendar";
Flds["urn:schemas:mailheader:Content-Type"].Value = "application/octet-stream;
filename=\"test.ics\""; //TODO: Change test.ics to name of file
Flds["urn:schemas:mailheader:Content-Transfer-Encoding"].Value = "base64";
Flds["urn:schemas:mailheader:Content-Disposition"].Value = "attachment;
filename=\"test.ics\""; //TODO: Change test.ics to name of file
Flds.Update();
CDO.Configuration iConf;
iConf = new CDO.Configuration();
Flds = iConf.Fields;
// Set the CDOSYS configuration fields to use port 25 on the SMTP server.
Flds["https://schemas.microsoft.com/cdo/configuration/sendusing"].Value =
CDO.CdoSendUsing.cdoSendUsingPort;
Flds["https://schemas.microsoft.com/cdo/configuration/smtpserver"].Value = strSMTPSERVER;
Flds["https://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"].Value = 10;
//Flds["https://schemas.microsoft.com/cdo/configuration/smtpauthenticate"].Value = 2; //
NTLM
Flds.Update();
iMsg.Configuration = iConf;
iMsg.To = sTo;
iMsg.From = sFrom;
iMsg.Subject = sSubject;
iMsg.TextBody = sBody;
iMsg.Send();
}
Note: Programaticly creating a VCALENDAR is not supported outside of an Microsoft API which is designed to create a VCALENDAR. Please refer to the RFCs on how to create VCALENDAR content.
Note: Creating a meeting request with CDOSYS/System.Web.Mail/System.Net.Mail is not supported.
Comments
- Anonymous
May 05, 2008
PingBack from http://www.basketballs-sports.info/basketball-chat/?p=1223