通过ics会议预约向Outlook发送电子邮件 [英] Send email to Outlook with ics meeting appointment
问题描述
我想向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屋!