简体   繁体   English

使用ics会议预约向Outlook发送电子邮件

[英]Send email to Outlook with ics meeting appointment

I want to send an email with appointment\\meeting (ICS) to Outlook client. 我想向Outlook客户端发送带有约会\\会议(ICS)的电子邮件。 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("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); 
}

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! 邮件是正确发送的,但在outlook(我用outlook 2010测试)它显示正文,位置,数据,它显示日历但在邮件日历上方我看到“无法在日历上找到会议“并且”接受“,”拒绝“按钮被禁用!

I have tried other solutions and found on the web for ex. 我尝试了其他解决方案,并在网上找到了。 DDAY.Ical but I haven't found any example to use it. DDAY.Ical但我还没有找到任何使用它的例子。

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

i think you have used same email id in both msg.From and msg.To 我认为你在msg.From和msg.To中都使用了相同的电子邮件ID

msg.From = new MailAddress("xxxxx@xyz.com", "ABC");
msg.To.Add(new MailAddress("yyyy@xyz.com", "BCD"));

i have faced same issue but after taking different email get resolve. 我遇到了同样的问题,但在采取不同的电子邮件得到解决。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM