使用C#发送Outlook会议请求

我期待从C#发送Outlook会议请求。 我有下面的代码,它可以完成这项工作但是。

string startTime1 = Convert.ToDateTime(startTime).ToString("yyyyMMddTHHmmssZ"); string endTime1 = Convert.ToDateTime(endTime).ToString("yyyyMMddTHHmmssZ"); SmtpClient sc = new SmtpClient(""); MailMessage msg = new MailMessage(); msg.From = new MailAddress("", "HR Self Service"); msg.To.Add(new MailAddress(emailto)); msg.Subject = "Holiday Approval"; msg.Body = emailbody; StringBuilder str = new StringBuilder(); str.AppendLine("BEGIN:VCALENDAR"); //PRODID: identifier for the product that created the Calendar object str.AppendLine("PRODID:-//ABC Company//Outlook MIMEDIR//EN"); str.AppendLine("VERSION:2.0"); str.AppendLine("METHOD:REQUEST"); str.AppendLine("BEGIN:VEVENT"); str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", startTime1));//TimeZoneInfo.ConvertTimeToUtc("BeginTime").ToString("yyyyMMddTHHmmssZ"))); str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow)); str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", endTime1));//TimeZoneInfo.ConvertTimeToUtc("EndTime").ToString("yyyyMMddTHHmmssZ"))); str.AppendLine(string.Format("LOCATION: {0}", "Location")); // UID should be unique. 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("STATUS:CONFIRMED"); str.AppendLine("BEGIN:VALARM"); str.AppendLine("TRIGGER:-PT15M"); str.AppendLine("ACTION:Accept"); str.AppendLine("DESCRIPTION:Reminder"); str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY"); str.AppendLine("END:VALARM"); str.AppendLine("END:VEVENT"); 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("END:VCALENDAR"); System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar"); ct.Parameters.Add("method", "REQUEST"); ct.Parameters.Add("name", "meeting.ics"); AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), ct); msg.AlternateViews.Add(avCal); //Response.Write(str); // sc.ServicePoint.MaxIdleTime = 2; sc.Send(msg); 

发送邀请时,需要用户接受邀请,当用户接受邀请时,Outlook日历显示状态为BUSY
有没有办法发送不需要用户接受它的邀请,Outlook日历显示为外出? 我试过这2部分但没有运气

 str.AppendLine("ACTION:Accept"); str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY"); 

如果这是资源邮箱,您可以将其配置为自动接受会议邀请(文件|选项|日历|自动接受或拒绝)。

如果这是一个任意邮箱,没有所有者的许可就不会发生任何事情。 如果您拥有用户凭据,则可以使用Outlook对象模型/ EWS / MAPI直接访问邮箱。