public
class
eAppointmentMail
{
public string
Name { set; get;
}
public string
Email { set; get;
}
public string
Location { set; get;
}
public
DateTime StartDate { set;
get; }
public
DateTime EndDate { set;
get; }
public string
Subject { set; get;
}
public string
Body { set; get;
}
}
public class specified
as input to my method "sendoutlookinvitation"
Step 2
include the following
code in web.config under <configuration> section
<system.net>
<mailSettings>
<smtp
deliveryMethod="Network"
from="[email protected]">
<network
host="smtp.gmail.com"
port="25"
userName="[email protected]"
password="myPwd"
defaultCredentials="false"/>
</smtp>
</mailSettings>
</system.net>
Step 3
In your c# code try
using the following snippet:
public
static string
sendOutlookInvitationViaICSFile(eAppointmentMail
objApptEmail)
{
try
{
Configuration config =
WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
MailSettingsSectionGroup
settings = (MailSettingsSectionGroup)config.GetSectionGroup("system.net/mailSettings");
SmtpClient sc =
new SmtpClient("smtp.gmail.com");
System.Net.Mail.MailMessage
msg = new System.Net.Mail.MailMessage();
msg.From = new
MailAddress(settings.Smtp.Network.UserName);
msg.To.Add(new
MailAddress(objApptEmail.Email,
objApptEmail.Name));
msg.Subject = objApptEmail.Subject;
msg.Body = objApptEmail.Body;
StringBuilder
str = new
StringBuilder();
str.AppendLine("BEGIN:VCALENDAR");
str.AppendLine("PRODID:-//"
+ objApptEmail.Email);
str.AppendLine("VERSION:2.0");
str.AppendLine("METHOD:REQUEST");
str.AppendLine("BEGIN:VEVENT");
str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}",
objApptEmail.StartDate.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")));
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}",
(objApptEmail.EndDate - objApptEmail.StartDate).Minutes.ToString()));
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}",
objApptEmail.EndDate.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")));
//str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}",
objApptEmail.StartDate.ToString()));
//str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}",
DateTime.UtcNow));
//str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}",
objApptEmail.EndDate.ToString()));
str.AppendLine("LOCATION:"
+ objApptEmail.Location);
str.AppendLine(string.Format("DESCRIPTION:{0}",
objApptEmail.Body));
str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}",
objApptEmail.Body));
str.AppendLine(string.Format("SUMMARY:{0}",
objApptEmail.Subject));
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}",
objApptEmail.Email));
str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}",
msg.To[0].DisplayName, msg.To[0].Address));
str.AppendLine("BEGIN:VALARM");
str.AppendLine("TRIGGER:-PT15M");
str.AppendLine("ACTION:DISPLAY");
str.AppendLine("DESCRIPTION:Reminder");
str.AppendLine("END:VALARM");
str.AppendLine("END:VEVENT");
str.AppendLine("END:VCALENDAR");
System.Net.Mime.ContentType
ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method",
"REQUEST");
AlternateView avCal =
AlternateView.CreateAlternateViewFromString(str.ToString(),
ct);
msg.AlternateViews.Add(avCal);
NetworkCredential nc =
new
NetworkCredential(settings.Smtp.Network.UserName,
settings.Smtp.Network.Password);
sc.Port = settings.Smtp.Network.Port;
sc.EnableSsl = true;
sc.Credentials = nc;
try
{
sc.Send(msg);
return
"Success";
}
catch
{
return
"Fail";
}
}
catch { }
return
string.Empty;
}
It will simply download
an ICS file, once you click on that it will open up with outlook calendar to
show your appointment created.