Introduction
Nowadays, event management is becoming a very popular idea especially in case of web application development. Most of the application are synchronizing data with Outlook contacts and calendar. Here is a small tool to create hourly and daily events with send email in asp.net. This concept is very simple creating an ICS file and sending as mail attachment.
Background
I was developing a web application which is related to event management and my client requirement is to send day and hour events so it will be synchronized with client’s Outlook calendar.
Send Event/Appointment
In Outlook, two types of events/appointments can be sent.
- Hourly event (based on specific hour of a day)
- Day event (based on specific days)
Hourly Event
To send hourly event, you need to send ics file for hour event. ICS file looks like that:
I have made a simple UI to send hour event. To load hour, use a simple control from AjaxControlToolkit. This is the simple UI.
Code to create ICS file for day event/appointment:
public string MakeHourEvent(string subject, string location,
DateTime date, string startTime, string endTime)
{
string filePath = string.Empty;
string path = HttpContext.Current.Server.MapPath(@"\iCal\");
filePath = path + subject + ".ics";
writer = new StreamWriter(filePath);
writer.WriteLine("BEGIN:VCALENDAR");
writer.WriteLine("VERSION:2.0");
writer.WriteLine("PRODID:-//hacksw/handcal//NONSGML v1.0//EN");
writer.WriteLine("BEGIN:VEVENT");
string startDateTime = GetFormatedDate(date)+"T"+GetFormattedTime(startTime);
string endDateTime = GetFormatedDate(date) + "T" + GetFormattedTime(endTime);
writer.WriteLine("DTSTART:" + startDateTime);
writer.WriteLine("DTEND:" + endDateTime);
writer.WriteLine("SUMMARY:" + subject);
writer.WriteLine("LOCATION:" + location);
writer.WriteLine("END:VEVENT");
writer.WriteLine("END:VCALENDAR");
writer.Close();
return filePath;
}
Daily Event
To send daily event, you need to send ICS file. This file looks like that:
I have made a simple UI using an Ajaxtoolkit CalendarExtender
. Here, the user can select a different date from calendar and in case of day event creation, there is no need to time.
Here is the code to create day event.
public string MakeDayEvent
(string subject, string location, DateTime startDate, DateTime endDate)
{
string filePath = string.Empty;
string path = HttpContext.Current.Server.MapPath(@"\iCal\");
filePath = path + subject + ".ics";
writer = new StreamWriter(filePath);
writer.WriteLine("BEGIN:VCALENDAR");
writer.WriteLine("VERSION:2.0");
writer.WriteLine("PRODID:-//hacksw/handcal//NONSGML v1.0//EN");
writer.WriteLine("BEGIN:VEVENT");
string startDay = "VALUE=DATE:" + GetFormatedDate(startDate);
string endDay = "VALUE=DATE:" + GetFormatedDate(endDate);
writer.WriteLine("DTSTART;" + startDay);
writer.WriteLine("DTEND;" + endDay);
writer.WriteLine("SUMMARY:" + subject);
writer.WriteLine("LOCATION:" + location);
writer.WriteLine("END:VEVENT");
writer.WriteLine("END:VCALENDAR");
writer.Close();
return filePath;
}
The code to send mail with attachment is as follows:
public void SendMail(string from, string to,
string subject, string body, Attachment attachment)
{
MailMessage mail = new MailMessage(from, to, subject, body);
mail.Attachments.Add(attachment);
SmtpClient smtp = new SmtpClient("localhost");
smtp.Send(mail);
mail.Dispose();
}
The complete code of that tool is available in the code folder. Please download and try with that.
History
- Version-1 of that small tool