zoukankan      html  css  js  c++  java
  • 通过Exchange Web Service Managed API 读取Exchange邮件或任务

    Exchange Web Service Managed API:是微软提供的通过Exchange Web Service开发客户端应用程序来快速读取Exchange邮件、任务、发送邮件、删除邮件等的管理接口。

    使用API的好处:

    1、不用需要引用Exchange Web Service

    2、代码量大大减少,提高开发效率

    3、提高性能且更简单容易的对Exchange进行管理和操作

    下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c3342fb3-fbcc-4127-becf-872c746840e1

    通过API来读取Exchange的邮件或任务的实现过程,如下:

    1、引用如下命名空间:

    using Microsoft.Exchange.WebServices.Data;
    using System.Net;
    using System.Net.Security;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;

    2、实现代码

            /// <summary>
            /// 读取所有Exchange对象数目,不使用模拟功能
            /// </summary>
            /// <param name="serverName">服务器名称</param>
            /// <param name="useAutodiscover">是否自动发现服务器URL</param>
            public void EWSImpersonations(string serverName, bool useAutodiscover)
            {
                try
                {
                    //Call SSL Web service must added!!!
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    
                    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);//如果是Exchange 2010,则切换到2010
                //建立信任连接
                    //ICredentials creds = CredentialCache.DefaultNetworkCredentials;
                        ICredentials creds = new NetworkCredential("username", "password", "domain");
                    service.Credentials = new WebCredentials(creds);
    
                    if (!useAutodiscover)
                    {
                        string[] servers = serverName.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    
                        for (int i = 0; i < servers.Length; i++)
                        {
                            try
                            {
                                service.Url = new Uri("https://" + servers[i] + "/ews/exchange.asmx");
                                break;
                            }
                            catch
                            {
                            }
                        }
                    }
    
                    service.PreAuthenticate = true;
                
                //创建读取信息视图
                    ItemView view = new ItemView(10);
                    view.OrderBy.Add(ItemSchema.DateTimeReceived, Microsoft.Exchange.WebServices.Data.SortDirection.Descending);
    
                    #region ReadEmail
    
                    Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);//Inbox文件夹,不包括子文件夹
                    int unread = inbox.UnreadCount;
    
                    Microsoft.Exchange.WebServices.Data.EmailMessage em = null;
    
                    FindItemsResults<Item> findMailResults = service.FindItems(WellKnownFolderName.Inbox, view);
                    Response.Write("<br>unread mail subject: <br><br>");
    
                    foreach (Item m in findMailResults)
                    {
                        em = (Microsoft.Exchange.WebServices.Data.EmailMessage)m;
                        if (!em.IsRead)
                        {
                            Response.Write(em.Subject + string.Format("  发件人: {0} <br>", em.From.Name.ToString()));
                        }
                    }
    
                    //find all child folders mail message
                    FindInboxChildFolders(service, view, serverName, ref unread);
    
                    Response.Write("unread mail : " + unread.ToString() + "<br>");
    
                    #endregion
    
                    Response.Write("==================================================");
    
                    #region ReadTask
    
                    int newTasks = 0;//unread task number
                    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Tasks,view); //读取任务文件夹,不包括子文件夹
                    Microsoft.Exchange.WebServices.Data.Task t = null;
    
                    Response.Write("<br>unread task subject:<br>");
    
                    foreach (Item item in findResults.Items)
                    {
                        t = (Microsoft.Exchange.WebServices.Data.Task)(item);
                        if (!t.IsComplete)
                        {
                            newTasks++;
    
                            Response.Write(t.Subject);
    
                            Response.Write("<br>status :" + t.Status);
                        }
                    }
    
                    //Find all task child folder
                    FindTaskChildFolders(service, view, serverName, ref newTasks);
    
                    Response.Write("<br><br> unread task :" + newTasks.ToString());
    
                    #endregion
                }
                catch (Exception ex)
                {
                    Response.Write(errorMessage);
                }
            }
    
            /// <summary>
            /// Find all child folder mail message
            /// </summary>
            /// <param name="service"></param>
            /// <param name="view"></param>
            /// <param name="serverName"></param>
            /// <param name="unread"></param>
            private void FindInboxChildFolders(ExchangeService service, ItemView view, string serverName, ref int unread)
            {
                try
                {
                    FindFoldersResults findResults = service.FindFolders(WellKnownFolderName.Inbox,new FolderView(int.MaxValue));
                    Microsoft.Exchange.WebServices.Data.EmailMessage em = null;
                    foreach (Folder folder in findResults.Folders)
                    {
                        FindItemsResults<Item> findMailResults = folder.FindItems(view);
                        unread += folder.UnreadCount;
                        foreach (Item m in findMailResults)
                        {
                            em = (Microsoft.Exchange.WebServices.Data.EmailMessage)m;
                            if (!em.IsRead)
                            {
                                Response.Write(em.Subject + string.Format("  发件人: {0} <br>", em.From.Name.ToString()));
                            }
                        }
                    }
                }
                catch
                {
                }
    
            }
    
            /// <summary>
            /// Find all task child folder
            /// </summary>
            /// <param name="service"></param>
            /// <param name="view"></param>
            /// <param name="serverName"></param>
            /// <param name="newTasks"></param>
            private void FindTaskChildFolders(ExchangeService service, ItemView view, string serverName, ref int newTasks)
            {
                try
                {
                    FindFoldersResults findResults = service.FindFolders(WellKnownFolderName.Tasks,new FolderView(int.MaxValue));
    
                    Microsoft.Exchange.WebServices.Data.Task t = null;
    
                    foreach (Folder folder in findResults.Folders)
                    {
                        FindItemsResults<Item> findTaskResults = folder.FindItems(view);
                        foreach (Item task in findTaskResults)
                        {
                            t = (Microsoft.Exchange.WebServices.Data.Task)(task);
                            if (!t.IsComplete)
                            {
                                newTasks++;
    
                                Response.Write( t.Subject );
    
                                Response.Write("<br>status :" + t.Status);
                            }
                        }
                    }
                }
                catch (Exception)
                {
                }
            }
    
            #endregion
    
            /// <summary>
            /// 忽略SSL证书请求
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="certificate"></param>
            /// <param name="chain"></param>
            /// <param name="errors"></param>
            /// <returns></returns>
            public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            }

    3、编译运行程序,读取邮件或任务

  • 相关阅读:
    问题账户需求分析
    UnityWebRequest_ZT
    NetworkManager网络通讯_问题汇总(四)
    NetworkManager网络通讯_NetworkLobbyManager(三)
    NetworkManager网络通讯_NetworkManager(二)
    C#关于private protected sealed Virtual/Override
    NetworkManager网络通讯_Example(一)
    Udp 异步通信(三)
    TCP Socket服务端客户端(二)
    TCP UDP基本编程(一)
  • 原文地址:https://www.cnblogs.com/masahiro/p/10131200.html
Copyright © 2011-2022 走看看