1. 程式人生 > >EWS send mail meeting, read meeting message(一)

EWS send mail meeting, read meeting message(一)

per 一個 read HERE arch ddd req tps app

最近做了一個項目,負責的主要模塊,是web系統跟 OutLook 數據相互同步,就是從web發送郵件,會議邀請到 OutLook,然後把OutLook客戶端發送的Meeting同步到web系統中

首先是讀取OutLook

1 用有權限的賬號登陸EWS服務 讀取指定郵箱 的Meeting。這個賬號是一個權限比較大的賬號,可以模擬別的郵箱,讀取被模擬郵箱的郵件,如果是普通用戶郵箱,要讀取自己的郵件信息,只需要開通訪問EWS服務的權限。

  1  static void TestEws()
  2         {
  3             try
  4             {
5 ExchangeService service = new ExchangeService(); 6 service.Credentials = new WebCredentials(WebConfig.GetString("Usercount"), WebConfig.GetString("pwd"));//有訪問EWS 權限的賬號 密碼 7 service.Url = new Uri(WebConfig.GetString("ExchangeUrl"));//已知EWS URL 8 9
var folderView = new FolderView(1000) 10 { 11 Traversal = FolderTraversal.Deep, 12 PropertySet = new PropertySet(FolderSchema.FolderClass, 13 FolderSchema.DisplayName, 14 FolderSchema.TotalCount,
15 FolderSchema.ArchiveTag, 16 FolderSchema.ManagedFolderInformation, 17 FolderSchema.ParentFolderId) 18 }; 19 20 service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, WebConfig.GetString("calendarEmail"));//模擬郵箱,讀取被模擬郵箱的Meeting
21 FindFoldersResults folders = service.FindFolders(WellKnownFolderName.MsgFolderRoot, folderView); 22 23 var calendarlist = folders.Folders.Where(x => x.DisplayName.ToLower().Trim() == "calendar"); 26 27 28 var CalendarList = new List<Invitation>(); 29 foreach (Folder myFolder in calendarlist) 30 { 31 var calendar = (myFolder as CalendarFolder); 32 CalendarView cView = new CalendarView(DateTime.Now, DateTime.Now.AddDays(90), 99999); 33 cView.PropertySet = new PropertySet(BasePropertySet.IdOnly); 34 FindItemsResults<Appointment> findResults = calendar.FindAppointments(cView); 35 36 if (findResults.TotalCount <= 0) 37 continue; 38 //load properties, like attendees, textbody and so on 39 service.LoadPropertiesForItems( 40 (from item in findResults select item).Distinct(), 41 new PropertySet( 42 BasePropertySet.IdOnly, 43 AppointmentSchema.Subject, 44 AppointmentSchema.Start, 45 AppointmentSchema.ConversationId, 46 AppointmentSchema.End, 47 AppointmentSchema.Organizer, 48 AppointmentSchema.TextBody, 49 AppointmentSchema.RequiredAttendees, 50 AppointmentSchema.AppointmentState, 51 AppointmentSchema.AppointmentType, 52 AppointmentSchema.Location, 53 AppointmentSchema.LastModifiedTime, 54 AppointmentSchema.Body, 55 AppointmentSchema.ICalUid 56 )); 57 58 int count = 0; 59 var itemlist = new List<string>(); 60 foreach (Appointment a in findResults) 61 { 62 if (itemlist.Contains(a.ICalUid)) 63 { 64 continue; 65 } 66 else 67 { 68 itemlist.Add(a.ICalUid); 69 } 70 71 if (a.Location == null) 72 { 73 count++; 74 break; 75 } 76 77 CalendarList.Add(new Invitation() 78 { 79 OutlookID = a.ICalUid.ToString(), 80 Subject = a.Subject.ToString(), 81 Organizer = a.Organizer.Address.ToString(), 82 Attendees = GetAttendees(a.RequiredAttendees), 83 Start = a.Start, 84 End = a.End, 85 AppointmentState = a.AppointmentState, 86 LastModifiedTime = a.LastModifiedTime, 87 Location = a.Location.ToString(), 88 TextBody = a.Body.ToString() 89 }); 90 count++; 91 92 } 93 94 } 110 121 Console.Read(); 122 123 } 124 catch (Exception ex) 125 { 126 Console.WriteLine(ex.Message); 135 136 } 137 }

2.訂閱制定郵箱,當該郵箱收到新的有件時,能直接收到EWS的推送信息

訂閱分三種方式 EWS拉通知 EWS流式處理通知 推送通知

參考資料

https://msdn.microsoft.com/zh-cn/library/office/dn458791(v=exchg.150).aspx

https://www.cnblogs.com/wolf-sun/p/6483415.html

EWS send mail meeting, read meeting message(一)