设为首页 收藏本站
查看: 1517|回复: 0

[经验分享] 读取OWA(Outlook Web Access)中未读邮件(转)

[复制链接]

尚未签到

发表于 2015-9-13 13:07:56 | 显示全部楼层 |阅读模式
  在SharePoint的项目中,经常会把SharePoint 和Exchange整合到一起,所以我们经常会遇到读取OWA中未读邮件的问题,当然解决的方法 也是多种多样的。有以下几种:
  1.  WebDAV的方式
  示例代码:
  view plaincopy to clipboardprint?
private int GetUnReadMailCount()   
        {   
            string url = "http://10.10.10.254/exchange/"; //指定Exchange服务器地址   
            System.Net.HttpWebRequest Request;   
            System.Net.WebResponse Response;   
            System.Net.CredentialCache MyCredentialCache;   
            string strUserName = UserName; //指定登录的用户名   
            string strRootURI = url + strUserName; //得到要访问邮箱的WebDAV地址   
            string strPassword = PassWord; //指定该用户的密码   
            string strDomain = "unique.com"; //指定域名   
            string strQuery = "";   
            byte[] bytes = null;   
            System.IO.Stream RequestStream = null;   
            System.IO.Stream ResponseStream = null;   
            XmlDocument ResponseXmlDoc = null;   
            XmlNodeList HrefNodes = null;   
            XmlNodeList SizeNodes = null;   
            int count = 0;   
            try  
            {   
                // 用SQL查询WebDAV返回结果中的unreadcount节点.   
                strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"  
                     + "<D:sql>SELECT \"DAV:displayname\",\"urn:schemas:httpmail:unreadcount\" FROM \"" + strRootURI + "\""  
                   + "</D:sql></D:searchrequest>";   
                // 创建新的CredentialCache对象,构建身份凭据   
                MyCredentialCache = new System.Net.CredentialCache();   
                MyCredentialCache.Add(new System.Uri(strRootURI), "NTLM",   
                new System.Net.NetworkCredential(strUserName, strPassword, strDomain));   
                // Create the HttpWebRequest object.   
                Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);   
                // 指定HttpWebRequest的身份凭据,此处为关键所在。如果使用之前   
                // 创建的MyCredentialCache,则这个身份凭据是可以从Web服务器传递   
                // 到Exchange服务器的,但是这样带来的问题也很明显,就是不能够自   
                // 动获取当前登录到域的用户的身份。即便已经成功登录到域,那也只   
                // 能通过form再次输入用户名密码。因此,我在这里用的是   
                // Request.Credentials = CredentialCache.DefaultCredentials,   
                // 这样便可以获得当前用户的凭据,但是这样带来的问题便是上面提到的   
                // 身份凭据无法传递的问题,解决方法请关注下篇文章。   
                Request.Credentials = MyCredentialCache;   
                // 指定WebDAV的SEARCH方法   
                Request.Method = "SEARCH";   
                // Encode the body using UTF-8.   
                bytes = Encoding.UTF8.GetBytes((string)strQuery);   
                // Set the content header length. This must be   
                // done before writing data to the request stream.   
                Request.ContentLength = bytes.Length;   
                // Get a reference to the request stream.   
                RequestStream = Request.GetRequestStream();   
                // Write the SQL query to the request stream.   
                RequestStream.Write(bytes, 0, bytes.Length);   
                // Close the Stream object to release the connection   
                // for further use.   
                RequestStream.Close();   
                // Set the content type header.   
                Request.ContentType = "text/xml";   
                // Send the SEARCH method request and get the   
                // response from the server.   
                Response = (HttpWebResponse)Request.GetResponse();   
                // Get the XML response stream.   
                ResponseStream = Response.GetResponseStream();   
                // 创建XmlDocument对象,并获取收件箱的unreadcount节点的值   
                ResponseXmlDoc = new XmlDocument();   
                ResponseXmlDoc.Load(ResponseStream);   
                HrefNodes = ResponseXmlDoc.GetElementsByTagName("a:displayname");   
                SizeNodes = ResponseXmlDoc.GetElementsByTagName("d:unreadcount");   
                for (int i = 0; i < HrefNodes.Count; i++)   
                {   
                    if (HrefNodes.InnerText == "收件箱")   
                        count = int.Parse(SizeNodes.InnerText);   
                }   
                ResponseStream.Close();   
                Response.Close();   
            }   
            catch (Exception ex)   
            {   
                // Catch any exceptions. Any error codes from the SEARCH   
                // method request on the server will be caught here, also.   
                return -1;   
            }   
            return count;   
        }  
private int GetUnReadMailCount()
        {
            string url = "http://10.10.10.254/exchange/"; //指定Exchange服务器地址
            System.Net.HttpWebRequest Request;
            System.Net.WebResponse Response;
            System.Net.CredentialCache MyCredentialCache;
            string strUserName = UserName; //指定登录的用户名
            string strRootURI = url + strUserName; //得到要访问邮箱的WebDAV地址
            string strPassword = PassWord; //指定该用户的密码
            string strDomain = "unique.com"; //指定域名
            string strQuery = "";
            byte[] bytes = null;
            System.IO.Stream RequestStream = null;
            System.IO.Stream ResponseStream = null;
            XmlDocument ResponseXmlDoc = null;
            XmlNodeList HrefNodes = null;
            XmlNodeList SizeNodes = null;
            int count = 0;
            try
            {
                // 用SQL查询WebDAV返回结果中的unreadcount节点.
                strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"
                     + "<D:sql>SELECT \"DAV:displayname\",\"urn:schemas:httpmail:unreadcount\" FROM \"" + strRootURI + "\""
                   + "</D:sql></D:searchrequest>";
                // 创建新的CredentialCache对象,构建身份凭据
                MyCredentialCache = new System.Net.CredentialCache();
                MyCredentialCache.Add(new System.Uri(strRootURI), "NTLM",
                new System.Net.NetworkCredential(strUserName, strPassword, strDomain));
                // Create the HttpWebRequest object.
                Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);
                // 指定HttpWebRequest的身份凭据,此处为关键所在。如果使用之前
                // 创建的MyCredentialCache,则这个身份凭据是可以从Web服务器传递
                // 到Exchange服务器的,但是这样带来的问题也很明显,就是不能够自
                // 动获取当前登录到域的用户的身份。即便已经成功登录到域,那也只
                // 能通过form再次输入用户名密码。因此,我在这里用的是
                // Request.Credentials = CredentialCache.DefaultCredentials,
                // 这样便可以获得当前用户的凭据,但是这样带来的问题便是上面提到的
                // 身份凭据无法传递的问题,解决方法请关注下篇文章。
                Request.Credentials = MyCredentialCache;
                // 指定WebDAV的SEARCH方法
                Request.Method = "SEARCH";
                // Encode the body using UTF-8.
                bytes = Encoding.UTF8.GetBytes((string)strQuery);
                // Set the content header length. This must be
                // done before writing data to the request stream.
                Request.ContentLength = bytes.Length;
                // Get a reference to the request stream.
                RequestStream = Request.GetRequestStream();
                // Write the SQL query to the request stream.
                RequestStream.Write(bytes, 0, bytes.Length);
                // Close the Stream object to release the connection
                // for further use.
                RequestStream.Close();
                // Set the content type header.
                Request.ContentType = "text/xml";
                // Send the SEARCH method request and get the
                // response from the server.
                Response = (HttpWebResponse)Request.GetResponse();
                // Get the XML response stream.
                ResponseStream = Response.GetResponseStream();
                // 创建XmlDocument对象,并获取收件箱的unreadcount节点的值
                ResponseXmlDoc = new XmlDocument();
                ResponseXmlDoc.Load(ResponseStream);
                HrefNodes = ResponseXmlDoc.GetElementsByTagName("a:displayname");
                SizeNodes = ResponseXmlDoc.GetElementsByTagName("d:unreadcount");
                for (int i = 0; i < HrefNodes.Count; i++)
                {
                    if (HrefNodes.InnerText == "收件箱")
                        count = int.Parse(SizeNodes.InnerText);
                }
                ResponseStream.Close();
                Response.Close();
            }
            catch (Exception ex)
            {
                // Catch any exceptions. Any error codes from the SEARCH
                // method request on the server will be caught here, also.
                return -1;
            }
            return count;
        }
  缺点主要在用户的凭证上面。
  a.   通过用户的用户名和密码进行身份的认证。可以通过SharePoint的SSO存储用户的凭证信息
  b.   加域的机器通过默认的身份凭证信息进行身份认证。这里面会有一个认证的设置。因为SharePoint中默认的认证方式是NTLM,认证的时候,需要使用用户名和密码,而Kerberos认证是通过票据进行认证的。所以我们要把相应的认证方式进行设置。
  2.   通过Exchange Web Services方式
  通过Exchange Web Services 访问的方式也有2中得到未读邮件的方式:
  a.   通过用户的用户名和密码进行认证,查询自己的未读邮件
  示例代码:
  view plaincopy to clipboardprint?
protected int GetUnreadMailCount1()   
    {   
        int count = 0;   
        try  
        {   
            string url = System.Configuration.ConfigurationSettings.AppSettings["SMTPServer"];   
            if (!url.EndsWith("/"))   
            {   
                url += "/";   
            }   
            url += "EWS/Exchange.asmx";   
            url = "https://" + url;   
            // 绑定exchange服务器   
            ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();   
            // 建立信任连接   
            exchangeServer.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;   
            exchangeServer.Url = url;   
            // 定义邮件的收件箱   
            DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];   
            folderIDArray[0] = new DistinguishedFolderIdType();   
            folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;   
            PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();   
            ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;   
            PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();   
            pteftComment.PropertyTag = "0x3004"; // PR_COMMENT   
            pteftComment.PropertyType = MapiPropertyTypeType.String;   
            // 定义GetFolderType对象,设置相应属性   
            GetFolderType myfoldertype = new GetFolderType();   
            myfoldertype.FolderIds = folderIDArray;   
            myfoldertype.FolderShape = new FolderResponseShapeType();   
            myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;   
            myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];   
            myfoldertype.FolderShape.AdditionalProperties[0] = ptuftDisplayName;   
            myfoldertype.FolderShape.AdditionalProperties[1] = pteftComment;   
            // 获取服务器中的文件夹的集合   
            GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);   
            // 获取收件箱   
            FolderInfoResponseMessageType firmtInbox =   
                (FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[0];   
            PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();   
            ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;   
            PathToUnindexedFieldType ptuftBody = new PathToUnindexedFieldType();   
            ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments;   
            PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();   
            pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS   
            pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;   
            // 定义FindItemType对象,准备获取收件箱中的集合   
            FindItemType findItemRequest = new FindItemType();   
            findItemRequest.Traversal = ItemQueryTraversalType.Shallow;   
            findItemRequest.ItemShape = new ItemResponseShapeType();   
            findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;   
            findItemRequest.ParentFolderIds = new FolderIdType[1];   
            findItemRequest.ParentFolderIds[0] = firmtInbox.Folders[0].FolderId;   
            // 获取邮件   
            FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);   
            // 循环迭代每一封邮件   
            foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)   
            {   
                // 如果包含邮件,显示出来   
                if (firmtMessage.RootFolder.TotalItemsInView > 0)   
                {   
                    // 循环迭代每一封邮件详细信息   
                    foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)   
                    {   
                        if (!((MessageType)(it)).IsRead)   
                        {   
                            count++;   
                        }   
                    }   
                }   
            }   
        }   
        catch (Exception ex)   
        {   
            //TODO   
        }   
        return count;   
    }   
   
protected int GetUnreadMailCount1()
    {
        int count = 0;
        try
        {
            string url = System.Configuration.ConfigurationSettings.AppSettings["SMTPServer"];
            if (!url.EndsWith("/"))
            {
                url += "/";
            }
            url += "EWS/Exchange.asmx";
            url = "https://" + url;
            // 绑定exchange服务器
            ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding();
            // 建立信任连接
            exchangeServer.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            exchangeServer.Url = url;
            // 定义邮件的收件箱
            DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
            folderIDArray[0] = new DistinguishedFolderIdType();
            folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;
            PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();
            ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;
            PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();
            pteftComment.PropertyTag = "0x3004"; // PR_COMMENT
            pteftComment.PropertyType = MapiPropertyTypeType.String;
            // 定义GetFolderType对象,设置相应属性
            GetFolderType myfoldertype = new GetFolderType();
            myfoldertype.FolderIds = folderIDArray;
            myfoldertype.FolderShape = new FolderResponseShapeType();
            myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;
            myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];
            myfoldertype.FolderShape.AdditionalProperties[0] = ptuftDisplayName;
            myfoldertype.FolderShape.AdditionalProperties[1] = pteftComment;
            // 获取服务器中的文件夹的集合
            GetFolderResponseType myFolder = exchangeServer.GetFolder(myfoldertype);
            // 获取收件箱
            FolderInfoResponseMessageType firmtInbox =
                (FolderInfoResponseMessageType)myFolder.ResponseMessages.Items[0];
            PathToUnindexedFieldType ptuftSubject = new PathToUnindexedFieldType();
            ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject;
            PathToUnindexedFieldType ptuftBody = new PathToUnindexedFieldType();
            ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments;
            PathToExtendedFieldType pteftFlagStatus = new PathToExtendedFieldType();
            pteftFlagStatus.PropertyTag = "0x1090"; // PR_FLAG_STATUS
            pteftFlagStatus.PropertyType = MapiPropertyTypeType.Integer;
            // 定义FindItemType对象,准备获取收件箱中的集合
            FindItemType findItemRequest = new FindItemType();
            findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
            findItemRequest.ItemShape = new ItemResponseShapeType();
            findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
            findItemRequest.ParentFolderIds = new FolderIdType[1];
            findItemRequest.ParentFolderIds[0] = firmtInbox.Folders[0].FolderId;
            // 获取邮件
            FindItemResponseType firt = exchangeServer.FindItem(findItemRequest);
            // 循环迭代每一封邮件
            foreach (FindItemResponseMessageType firmtMessage in firt.ResponseMessages.Items)
            {
                // 如果包含邮件,显示出来
                if (firmtMessage.RootFolder.TotalItemsInView > 0)
                {
                    // 循环迭代每一封邮件详细信息
                    foreach (ItemType it in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
                    {
                        if (!((MessageType)(it)).IsRead)
                        {
                            count++;
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            //TODO
        }
        return count;
    }
   
  b.  通过身份模拟的方式进行,这个好像只有Exchange 2007 中才有
  示例代码:
  view plaincopy to clipboardprint?
protected int GetUnreadMailCount()   
    {   
        try  
        {   
            string domianUserName = System.Configuration.ConfigurationSettings.AppSettings["DomianAdmin"];   
            string domianPassWord = System.Configuration.ConfigurationSettings.AppSettings["DomainPwd"];   
            string domainName = System.Configuration.ConfigurationSettings.AppSettings["DomainName"];   
            System.Net.NetworkCredential nc = new System.Net.NetworkCredential(domianUserName, domianPassWord, domainName);   
            System.Net.ServicePointManager.ServerCertificateValidationCallback =   
                    delegate(Object obj, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors errors)   
                    {   
                        return true;   
                    };   
            string exchUrl = System.Configuration.ConfigurationSettings.AppSettings["SMTPServer"];   
               
            string emEmailAddress = string.Empty;   
            string userName = SPContext.Current.Web.CurrentUser.LoginName;   
            emEmailAddress = userName.Substring(userName.IndexOf("\\") + 1) + "@" + domainName;   
            //  Response.Write("LoginName :" + userName.Substring(userName.IndexOf("\\") + 1));   
            ExchangeServiceBinding esb = new ExchangeServiceBinding();   
            esb.Url = string.Format("https://%7b0%7d/EWS/Exchange.asmx", exchUrl);   
            esb.Credentials = nc;   
            ExchangeImpersonationType exExchangeImpersonation = new ExchangeImpersonationType();   
            ConnectingSIDType csConnectingSid = new ConnectingSIDType();   
            csConnectingSid.PrimarySmtpAddress = emEmailAddress;   
            exExchangeImpersonation.ConnectingSID = csConnectingSid;   
            esb.ExchangeImpersonation = exExchangeImpersonation;   
            FindItemType findItemRequest = new FindItemType();   
            findItemRequest.Traversal = ItemQueryTraversalType.Shallow;   
            ItemResponseShapeType itemProperties = new ItemResponseShapeType();   
            itemProperties.BaseShape = DefaultShapeNamesType.IdOnly;   
            findItemRequest.ItemShape = itemProperties;   
            DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];   
            folderIDArray[0] = new DistinguishedFolderIdType();   
            folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;   
            findItemRequest.ParentFolderIds = folderIDArray;   
            RestrictionType restriction = new RestrictionType();   
            IsEqualToType isEqualTo = new IsEqualToType();   
            PathToUnindexedFieldType pathToFieldType = new PathToUnindexedFieldType();   
            pathToFieldType.FieldURI = UnindexedFieldURIType.messageIsRead;   
            FieldURIOrConstantType constantType = new FieldURIOrConstantType();   
            ConstantValueType constantValueType = new ConstantValueType();   
            constantValueType.Value = "0";   
            constantType.Item = constantValueType;   
            isEqualTo.Item = pathToFieldType;   
            isEqualTo.FieldURIOrConstant = constantType;   
            restriction.Item = isEqualTo;   
            findItemRequest.Restriction = restriction;   
            FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);   
            FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];   
            ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();   
            folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;   
            ItemType[] items = folderContents.Items;   
            return items == null ? 0 : items.Length;   
        }   
        catch (Exception ex)   
        {   
            //Response.Write(ex);   
            return 0;   
        }   
        return 0;   
    }      
protected int GetUnreadMailCount()
    {
        try
        {
            string domianUserName = System.Configuration.ConfigurationSettings.AppSettings["DomianAdmin"];
            string domianPassWord = System.Configuration.ConfigurationSettings.AppSettings["DomainPwd"];
            string domainName = System.Configuration.ConfigurationSettings.AppSettings["DomainName"];
            System.Net.NetworkCredential nc = new System.Net.NetworkCredential(domianUserName, domianPassWord, domainName);
            System.Net.ServicePointManager.ServerCertificateValidationCallback =
                    delegate(Object obj, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors errors)
                    {
                        return true;
                    };
            string exchUrl = System.Configuration.ConfigurationSettings.AppSettings["SMTPServer"];
            
            string emEmailAddress = string.Empty;
            string userName = SPContext.Current.Web.CurrentUser.LoginName;
            emEmailAddress = userName.Substring(userName.IndexOf("\\") + 1) + "@" + domainName;
            //  Response.Write("LoginName :" + userName.Substring(userName.IndexOf("\\") + 1));
            ExchangeServiceBinding esb = new ExchangeServiceBinding();
            esb.Url = string.Format("https://%7b0%7d/EWS/Exchange.asmx", exchUrl);
            esb.Credentials = nc;
            ExchangeImpersonationType exExchangeImpersonation = new ExchangeImpersonationType();
            ConnectingSIDType csConnectingSid = new ConnectingSIDType();
            csConnectingSid.PrimarySmtpAddress = emEmailAddress;
            exExchangeImpersonation.ConnectingSID = csConnectingSid;
            esb.ExchangeImpersonation = exExchangeImpersonation;
            FindItemType findItemRequest = new FindItemType();
            findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
            ItemResponseShapeType itemProperties = new ItemResponseShapeType();
            itemProperties.BaseShape = DefaultShapeNamesType.IdOnly;
            findItemRequest.ItemShape = itemProperties;
            DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
            folderIDArray[0] = new DistinguishedFolderIdType();
            folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;
            findItemRequest.ParentFolderIds = folderIDArray;
            RestrictionType restriction = new RestrictionType();
            IsEqualToType isEqualTo = new IsEqualToType();
            PathToUnindexedFieldType pathToFieldType = new PathToUnindexedFieldType();
            pathToFieldType.FieldURI = UnindexedFieldURIType.messageIsRead;
            FieldURIOrConstantType constantType = new FieldURIOrConstantType();
            ConstantValueType constantValueType = new ConstantValueType();
            constantValueType.Value = "0";
            constantType.Item = constantValueType;
            isEqualTo.Item = pathToFieldType;
            isEqualTo.FieldURIOrConstant = constantType;
            restriction.Item = isEqualTo;
            findItemRequest.Restriction = restriction;
            FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);
            FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];
            ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();
            folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;
            ItemType[] items = folderContents.Items;
            return items == null ? 0 : items.Length;
        }
        catch (Exception ex)
        {
            //Response.Write(ex);
            return 0;
        }
        return 0;
    }     优点:
可以不用域环境就能访问用户的未读邮件
  缺点:
  直接使用代码是没有用的,会提示相应的错误信息:
  The server to which the application is connected cannot impersonate the requested user due to insufficient permission.
  必须在Exchange上的控制台上面使用以下的命令,才能正常的使用:
  foreach ($exchangeServer in Get-ExchangeServer)
{
     if ($exchangeServer.ServerRole -match 'ClientAccess')
     {
          Add-ADPermission -Identity $exchangeServer.DistinguishedName -User 'domain"user' -ExtendedRights ms-Exch-EPI-Impersonation
     }
  }
  
  本文来自CSDN博客,转载请标明出处:http://blog.iyunv.com/showilove/archive/2009/08/24/4478101.aspx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-113071-1-1.html 上篇帖子: OutLook The profile name you entered already exists.Enter a different profile na 下篇帖子: outlook vba 的磁盘位置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表