Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send email to Outlook with ics meeting appointment

I want to send an email with appointment\meeting (ICS) to Outlook client. When the user receive the email he should accept the meeting invitation and automatically the meeting goes to the calendar and the email is automatically deleted.

I'm using this code:

public void Sendmail_With_IcsAttachment()
{

    MailMessage msg = new MailMessage();
    //Now we have to set the value to Mail message properties

    //Note Please change it to correct mail-id to use this in your application
    msg.From = new MailAddress("[email protected]", "ABC");
    msg.To.Add(new MailAddress("[email protected]", "BCD"));
    msg.CC.Add(new MailAddress("[email protected]", "DEF"));// it is optional, only if required
    msg.Subject = "Send mail with ICS file as an Attachment";
    msg.Body = "Please Attend the meeting with this schedule";

    // Now Contruct the ICS file using string builder
    StringBuilder str = new StringBuilder();
    str.AppendLine("BEGIN:VCALENDAR");
    str.AppendLine("PRODID:-//Schedule a Meeting");
    str.AppendLine("VERSION:2.0");
    str.AppendLine("METHOD:REQUEST");
    str.AppendLine("BEGIN:VEVENT");
    str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", DateTime.Now.AddMinutes(+330)));
    str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
    str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", DateTime.Now.AddMinutes(+660)));
    str.AppendLine("LOCATION: " + this.Location);
    str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
    str.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body));
    str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body));
    str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject));
    str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address));

    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");

    //Now sending a mail with attachment ICS file.                     
    System.Net.Mail.SmtpClient smtpclient = new System.Net.Mail.SmtpClient();
    smtpclient.Host = "localhost"; //-------this has to given the Mailserver IP

    smtpclient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

    System.Net.Mime.ContentType contype = new System.Net.Mime.ContentType("text/calendar");
    contype.Parameters.Add("method", "REQUEST"); 
    contype.Parameters.Add("name", "Meeting.ics");
    AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), contype);
    msg.AlternateViews.Add(avCal);
    smtpclient.Send(msg); 
}

The mail is correctly sent but in outlook (I'm testing it with outlook 2010) it shows the body, location,data, and it shows the calendar but above the calendar in the mail I see "Impossible to find the meeting on the calendar" and the "Accept","Decline"" buttons are disabled!

I have tried other solutions and found on the web for ex. DDAY.Ical but I haven't found any example to use it.

like image 590
ezechiele2517 Avatar asked Mar 29 '14 17:03

ezechiele2517


People also ask

How do I send an ICS meeting via email?

Simply download the . ics attachment, and then drag-and-drop that calendar event into an email to send it to recipients.

How do you send an email from a meeting invite in Outlook?

In your calendar, select the calendar group in the navigation pane. On the Home tab, click New Items and then select E-mail Message or New Meeting with All. Complete and send your email message or meeting request. Because you selected the entire calendar group, the message or request will be sent to all group members.

Can I attach an email to a calendar event in Outlook?

Drag and Drop to Create an Appointment – You can drag and drop an email into the calendar icon in Outlook (bottom left corner) and it will set up an appointment. Simply adjust the time and day.


2 Answers

After a lot of digging i found the solution:

You need to set the content-class of your eMail to

Content-class: urn:content-classes:calendarmessage

so add this to your code and it should work

msg.Headers.Add("Content-class", "urn:content-classes:calendarmessage");
like image 89
Franky Avatar answered Sep 28 '22 10:09

Franky


i think you have used same email id in both msg.From and msg.To

msg.From = new MailAddress("[email protected]", "ABC");
msg.To.Add(new MailAddress("[email protected]", "BCD"));

i have faced same issue but after taking different email get resolve.

like image 24
Shashikant Avatar answered Sep 28 '22 10:09

Shashikant