zoukankan      html  css  js  c++  java
  • 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("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;
                }
    
            }
        }
    }
  • 相关阅读:
    「luogu2414」[NOI2011]阿狸的打字机
    【模板】KMP算法,AC自动机
    「luogu2336」[SCOI2012]喵星球上的点名
    「luogu2463」[SDOI2008]Sandy的卡片
    【模板】后缀数组
    「luogu1972」 [SDOI2009]HH的项链
    北师大部分题解
    D:Sequence Swapping
    Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)
    点双连通分量F. Simple Cycles Edges
  • 原文地址:https://www.cnblogs.com/Qbit/p/14065930.html
Copyright © 2011-2022 走看看