C# 使用EWS 讀取 Exchange 未讀郵件並設置爲已讀

重寫一遍這個代碼。。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("[email protected]");
//或者 直接指定,速度稍快,但萬一哪天郵箱管理員把它改變了呢
            //_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;
            }

        }
    }
}
                 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章