Send an Outlook meeting request with C #

I want to send an invitation to look with C #. I have the code below that it does the job, but.

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

when the invitation is sent, the user needs to accept the invitation, and when the user accepts the invitation, the Outlook calendar shows the status BUSY
Is there a way to send an invitation that does not require the user to accept it, and the Outlook calendar displays as "Out of Office"? I tried with this 2 part but no luck

 str.AppendLine("ACTION:Accept"); str.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:BUSY"); 
+6
source share
1 answer

If this is a resource mailbox, you can configure it to automatically accept meeting requests (File | Options | Calendar | Automatic Accept or Decline).

If this is an arbitrary mailbox, nothing happens without the permission of the owner. The best you can do is direct access to your mailbox using the Outlook / EWS / MAPI object model if you have user credentials.

+1
source

Source: https://habr.com/ru/post/979338/


All Articles