通过ics会议预约向Outlook发送电子邮件 [英] Send email to Outlook with ics meeting appointment

查看:367
本文介绍了通过ics会议预约向Outlook发送电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想向Outlook客户端发送一封带有约会\会议(ICS)的电子邮件.当用户收到电子邮件时,他应该接受会议邀请,会议自动进入日历并自动删除电子邮件.

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.

我正在使用以下代码:

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("xxxxx@xyz.com", "ABC");
    msg.To.Add(new MailAddress("yyyyy@xyz.com", "BCD"));
    msg.CC.Add(new MailAddress("zzzzz@xyz.com", "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); 
}

邮件已正确发送,但在Outlook(我正在用Outlook 2010测试)中,它显示了正文,位置,数据,并显示了日历,但在邮件的日历上方,我看到无法找到会议"日历上的"和接受",拒绝"按钮被禁用!

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!

我尝试了其他解决方案,并在网上找到了ex. DDAY.Ical,但我还没有找到使用它的示例.

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

推荐答案

经过大量挖掘,我找到了解决方案:

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

这篇关于通过ics会议预约向Outlook发送电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆