当前位置: 首页 > news >正文

C# 使用Exchange WebService读取联系人

首先下载Microsoft.Exchange.WebServices.dll,如果安装有Exchange服务器,服务器上应该也是有的

Microsoft Exchange Web Services (EWS Managed API)

using Microsoft.Exchange.WebServices.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace BaseClass.Common
{
    public class ExchangeAPI
    {

        private static ExchangeService service;
        
        /// <summary>
        /// 初始化服务
        /// </summary>
        /// <returns></returns>
        private static ExchangeService InitService()
        {
            if(service == null)
            {
                service = new ExchangeService(Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2007_SP1);
                service.Credentials = new WebCredentials("用户名", "密码", "域名");
                service.AutodiscoverUrl("邮箱地址");
            }
            return service;
        }


        /// <summary>
        /// 获取组下的人
        /// </summary>
        /// <param name="groupAddress"></param>
        /// <returns></returns>
        public static DataTable GetContacts(string groupAddress)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Id", typeof(string));
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Address", typeof(string));
            table.Columns.Add("EmailType", typeof(string));

            ExchangeService service = InitService();

            ExpandGroupResults groupresult = service.ExpandGroup(groupAddress);
            foreach (EmailAddress email in groupresult.Members)
            {
                switch (email.MailboxType)
                {
                    case MailboxType.Contact:
                    case MailboxType.Mailbox:
                        {
                            DataRow row = table.NewRow();
                            table.Rows.Add(row);

                            row["Id"] = email.Id;
                            row["Name"] = email.Name;
                            row["Address"] = email.Address;
                            row["EmailType"] = "Contact";
                        }
                        break;
                }
            }
            return table;
        }

        /// <summary>
        /// 获取组下的分组
        /// </summary>
        /// <param name="groupAddress"></param>
        /// <returns></returns>
        public static DataTable GetGroups(string groupAddress)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Id", typeof(string));
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Address", typeof(string));
            table.Columns.Add("EmailType", typeof(string));
            ExchangeService service = InitService();

            ExpandGroupResults groupresult = service.ExpandGroup(groupAddress);
            foreach (EmailAddress email in groupresult.Members)
            {
                switch (email.MailboxType)
                {
                    case MailboxType.ContactGroup:
                    case MailboxType.GroupMailbox:
                    case MailboxType.PublicFolder:
                    case MailboxType.PublicGroup:
                        {
                            DataRow row = table.NewRow();
                            table.Rows.Add(row);

                            row["Id"] = email.Id;
                            row["Name"] = email.Name;
                            row["Address"] = email.Address;
                            row["EmailType"] = "Group";
                        }
                        break;
                }
            }
            return table;
        }

        /// <summary>
        /// 搜索联系人
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static DataTable ResolveName(string name)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Id", typeof(string));
            table.Columns.Add("Name", typeof(string));
            table.Columns.Add("Address", typeof(string));
            table.Columns.Add("EmailType", typeof(string));
            ExchangeService service = InitService();

            NameResolutionCollection nameResolutions = service.ResolveName(name, ResolveNameSearchLocation.DirectoryThenContacts, true);
            foreach (NameResolution resolution in nameResolutions)
            {
                switch (resolution.Mailbox.MailboxType)
                {
                    case MailboxType.ContactGroup:
                    case MailboxType.GroupMailbox:
                    case MailboxType.PublicFolder:
                    case MailboxType.PublicGroup:
                        {
                            DataRow row = table.NewRow();
                            table.Rows.Add(row);

                            row["Id"] = resolution.Mailbox.Id;
                            row["Name"] = resolution.Mailbox.Name;
                            row["Address"] = resolution.Mailbox.Address;
                            row["EmailType"] = "Group";
                        }
                        break;
                    case MailboxType.Contact:
                    case MailboxType.Mailbox:
                        {
                            DataRow row = table.NewRow();
                            table.Rows.Add(row);

                            row["Id"] = resolution.Mailbox.Id;
                            row["Name"] = resolution.Mailbox.Name;
                            row["Address"] = resolution.Mailbox.Address;
                            row["EmailType"] = "Contact";
                        }
                        break;
                }

            }
            return table;
        }


    }
}

  

 

转载于:https://www.cnblogs.com/suntime/p/10608929.html

相关文章:

  • Crafting 手工 Physically Motivated Shading Models for Game Development
  • 001 Android TextUtils工具类的使用
  • windows下安装oracle11g测试是否成功与监听器问题和网页控制台登录
  • unity复制到剪切板
  • 软件开发的权限控制和权限验证
  • PBR论文链接
  • 词频统计
  • 云时代架构阅读笔记四——深入的、详细的介绍Map以及HashMap
  • The Blinn-Phong Normalization Zoo
  • PAT甲级——1134 Vertex Cover (25 分)
  • 控制特效在UI上面
  • python-opencv学习第一章
  • Hive启动失败
  • kajiya-kay 头发
  • Prncnfg.vbs参数详解
  • 10个确保微服务与容器安全的最佳实践
  • 2018一半小结一波
  • JavaScript 基础知识 - 入门篇(一)
  • js作用域和this的理解
  • npx命令介绍
  • React as a UI Runtime(五、列表)
  • React+TypeScript入门
  • redis学习笔记(三):列表、集合、有序集合
  • 缓存与缓冲
  • 基于HAProxy的高性能缓存服务器nuster
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 写给高年级小学生看的《Bash 指南》
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)(1.13) SiK无线电高级配置(六)
  • (LeetCode) T14. Longest Common Prefix
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四)鸿鹄云架构一服务注册中心
  • .Net mvc总结
  • .NET NPOI导出Excel详解
  • .NET 常见的偏门问题
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Android] Amazon 的 android 音视频开发文档
  • [Android]创建TabBar
  • [BZOJ] 3262: 陌上花开
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [C++]AVL树怎么转
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [JavaWeb玩耍日记]Maven的安装与使用
  • [LeetCode]Pow(x,n)