Enviar correo electrónico a Outlook con ics cita de reunión

Quiero enviar un correo electrónico con cita previa\reunión (ICS) para el cliente de Outlook. Cuando el usuario recibe el correo electrónico se deben aceptar la invitación a la reunión y automáticamente la reunión va para el calendario y el correo electrónico se elimina automáticamente.

Estoy usando este código:

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

El correo es enviado correctamente pero en outlook (lo estoy probando con outlook 2010) se muestra que el cuerpo, la ubicación,los datos y se muestra el calendario, pero sobre el calendario en el correo me ve «Imposible encontrar la reunión en el calendario» y «Aceptar»,»Disminución» de» botones están deshabilitados!

He intentado otras soluciones y encontré en la web para ex. DDAY.Ical pero no he encontrado ningún ejemplo de uso.

Para su INFORMACIÓN, tanto en su MailMessage y SmtpClient necesitan estar en using bloques: using (MailMessage msg = new MailMessage()){... using (SmtpClient smtpClient = new SmtpClient()){ ... smtpClient.Send(msg);}}
ok gracias pero yo no creo Que sea el problema
Si el tema es o no, usted debe hacer que – he visto el correo no se entrega durante 2 minutos, hasta que el recolector de basura se llegó a la limpieza.
Puede agregar el total resultante MIME mensaje a tu post ?
¿Cómo puedo obtener toda la resultante mensaje MIME?

OriginalEl autor ezechiele2517 | 2014-03-29

2 Kommentare

  1. 11

    Después de un montón de excavación he encontrado la solución:

    Que usted necesita para establecer el contenido de clase de su correo electrónico para

    Content-class: urn:content-classes:calendarmessage

    para agregar esto a su código y se debe trabajar

    msg.Headers.Add("Content-class", "urn:content-classes:calendarmessage");
    lo he comprobado y 🙂
    Esta situación me pasó a mí después de un Intercambio de actualización para el año 2010. Yo estaba usando dos AlternativeViews (1 para HTML, 1 para el calendario). Para solucionar el problema que tenía para el fin de ellos, de modo que el código HTML de uno se fue por primera AlternateView HTML = AlternateView.CreateAlternateViewFromString(body, new System.Net.Mime.ContentType("text/html"));msg.AlternateViews.Add(HTML); AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(),contype); msg.AlternateViews.Add(avCal ); sé que este no era el problema para este ejemplo, sólo mencionar que en el caso de que alguien tenía el mismo problema.
    Gracias @shawad. Que resolvió mi problema.
    Agregar el encabezado resuelto mi problema.. kudoos!!
    Gracias, necesito usar Utc Fecha también en DTSTART y DTEND

    OriginalEl autor Franky

  2. 1

    creo que han utilizado el mismo id de correo electrónico, tanto en el msg.De y msg.A

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

    me he encontrado con el mismo problema, pero después de la toma de correo electrónico diferente a conseguir resolver.

    OriginalEl autor Shashikant

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea