2014-12-09 8 views
6

Czekam na wysłanie żądania spotkania Outlook z C#. Mam poniższy kod, który działa, ale.Wysyłanie żądania spotkania Outlook za pomocą C#

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

gdy zaproszenie wysłać, to trzeba użytkownikowi zaakceptować zaproszenie, a gdy użytkownik akceptuje zaproszenie kalendarza Outlook pokazuje status BUSY
jest jakiś sposób, aby wysłać zaproszenie, które nie wymaga od użytkownika akceptacji, a kalendarz Outlooka wyświetla się jako Out of Office? Próbowałem z tym 2 części, ale bez powodzenia

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

To dobrze sformułowane pytanie. Nie wyobrażam sobie jednak, aby Exchange pozwalał, aby jakakolwiek stara wiadomość SMTP automatycznie akceptowała wezwanie na spotkanie. – itsme86

+0

itsme86 Dziękujemy za komentarz, czy jest jakiś nowy SMTP, który pozwala mi wysyłać wiadomości e-mail, które automatycznie przyjmą wezwanie na spotkanie? –

+0

Nie SMTP, ale czy w ogóle korzystałeś z usług internetowych Exchange (EWS)? http://msdn.microsoft.com/en-us/library/office/dd877045%28v=exchg.140%29.aspx – itsme86

Odpowiedz

1

Jeśli jest to skrzynka pocztowa zasobu, można go skonfigurować do automatycznego przyjmować zaproszenia do rokowań (File | Opcje | Kalendarz | Automatyczne zaakceptować lub odrzucić).

Jeśli jest to dowolna skrzynka pocztowa, nic nie dzieje się bez zgody właściciela. Najlepsze, co możesz zrobić, to uzyskać bezpośredni dostęp do skrzynki pocztowej za pomocą modelu obiektowego Outlook/EWS/MAPI, jeśli masz poświadczenia użytkownika.