重寫一遍這個代碼。。3年前寫過一次,代碼沒備份,最近項目上用到,又花了幾個小時翻API 各種測試。
趕緊做筆記。。
轉載請注明出處:
https://www.cnblogs.com/Qbit/p/14065930.html
using Microsoft.Exchange.WebServices.Data; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { //打開鏈接 ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2013); //不使用當前安全上下文 _service.UseDefaultCredentials = false; //指定安全上下文 _service.Credentials = new NetworkCredential( "USERNAME", "PASSWORD", "DOMAIN"); //根據郵箱地址自動發現 _service.AutodiscoverUrl("test@domain.com"); //或者 直接指定,速度稍快,但萬一哪天郵箱管理員把它改變了呢 //_service.Url = new Uri("https:/xxxxx/ews/exchange.asmx"); //聲明一個分頁器之類的玩意 var itemView = new ItemView(10); //var folders = _service.FindFolders(WellKnownFolderName.Inbox, folderVw); //我們只需要獲取未讀郵件 SearchFilter.IsEqualTo unreadFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false); try { //指定收件箱,並綁定到Service var folder = Folder.Bind(_service, WellKnownFolderName.Inbox, BasePropertySet.IdOnly); //調用api 獲取未讀郵件清單 var items = folder.FindItems(unreadFilter, itemView); //var items = _service.FindItems(WellKnownFolderName.Inbox, unreadFilter, itemView); //需要指定要解析的屬性,更多屬性參考該類定義 !! PropertySet propSet = new PropertySet( EmailMessageSchema.TextBody, EmailMessageSchema.IsRead, EmailMessageSchema.Sender, EmailMessageSchema.From, EmailMessageSchema.Subject); //遍歷未讀郵件 foreach (EmailMessage item in items) { //這里必須指定上面定義的需要解析的架構,重新綁定才可以解析,不然某些屬性會報錯,比如 You must load or assign this property before you can read its value. EmailMessage message = (EmailMessage)Item.Bind(_service, item.Id, propSet); Console.WriteLine($"{message.Subject},Body:" + message.TextBody); item.IsRead = true; //設置為已讀 item.Update(ConflictResolutionMode.AlwaysOverwrite);//調用API更新 } } catch (Exception ex) { throw ex; } } } }