2014-12-09 28 views
6

C# 'dan bir görüşme isteği göndermek istiyorum. Aşağıdaki kodu işe aldığına inanıyorum ama. göndermek için herhangi bir yol yoktur davetiye göndermek olduğunu C ile bir Outlook Toplantı İsteği Gönderin 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); 

, bu kullanıcı davetini kabul gerekir ve kullanıcı davetini kabul edersem, Outlook takvim MEŞGUL
olarak durumunu gösterir kullanıcı kabul etmesini gerektirmeyen davetiye ve Outlook takvimi Ofis Dışı olarak görünüyor mu? (| Seçenekler | Takvim | Otomatik Kabul Et veya Reddet Dosyası) bu kaynak posta kutusu ise ben bu 2 parçası ama hayır şans

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

Bu iyi biçimlenmiş bir soru. Ancak, Exchange'in eski bir SMTP mesajının otomatik olarak bir toplantı isteğini kabul etmesine izin vereceğini düşünemiyorum. – itsme86

+0

itsme86 Yorumunuz için teşekkür ederiz, otomatik olarak bir toplantı isteğini kabul edecek e-posta göndermemi sağlayan yeni bir SMTP var mı? –

+0

SMTP değil, Exchange Web Hizmetlerine (EWS) hiç baktınız mı? http://msdn.microsoft.com/en-us/library/office/dd877045%28v=exchg.140%29.aspx – itsme86

cevap

1

ile çalıştık, sen toplantı davetleri kabul auto yapılandırabilirsiniz.

Bu isteğe bağlı bir posta kutusuysa, sahibin izni olmadan hiçbir şey olmaz. Yapabileceğiniz en iyi şey, kullanıcı kimlik bilgilerine sahipseniz Outlook Nesne Modeli/EWS/MAPI'yi kullanarak posta kutusuna doğrudan erişmektir.

İlgili konular