WebDAV方式访问Exchange 2003收件箱程序

 public DataTable GetUnReadMail()
 {
    
string url = "http://ip/exchange/"//指定Exchange服务器地址 
    System.Net.HttpWebRequest Request;
    System.Net.WebResponse Response;
    System.Net.CredentialCache MyCredentialCache;
    
string strUserName = "administrator"//指定登录的用户名
    string strRootURI = url + strUserName.Trim() + "/收件箱/"//得到要访问邮箱的WebDAV地址
    string strPassword = "test"//指定该用户的密码
    string strDomain = "test"//指定域名
    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:subject\",\"urn:schemas:httpmail:unreadcount\" FROM \"" + strRootURI + "\""
        
// + "</D:sql></D:searchrequest>";
        strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"
            
+ "<D:sql>SELECT \"urn:schemas:httpmail:importance\",\"urn:schemas:httpmail:from\",\"urn:schemas:httpmail:read\",\"urn:schemas:httpmail:datereceived\",\"urn:schemas:httpmail:subject\",\"urn:schemas:httpmail:hasattachment\","
            
+ "\"urn:schemas:httpmail:date\","
    
+ "\"DAV:contentclass\",\"DAV:getcontentlength\",\"DAV:displayname\""
            
+ "FROM \"" + strRootURI + "\""
            
+ "WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false"
            
+ "</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[i].InnerText == "收件箱")
        
//        count = int.Parse(SizeNodes[i].InnerText);
        
//}
        
//ResponseStream.Close();
        
//Response.Close();
        XmlNodeList idNodes = ResponseXmlDoc.GetElementsByTagName("a:displayname");
        XmlNodeList SenderNodes 
= ResponseXmlDoc.GetElementsByTagName("d:from");
        XmlNodeList importanceNodes 
= ResponseXmlDoc.GetElementsByTagName("d:importance");
        XmlNodeList contextclassNodes 
= ResponseXmlDoc.GetElementsByTagName("a:contentclass");
        XmlNodeList readNodes 
= ResponseXmlDoc.GetElementsByTagName("d:read");
        XmlNodeList datareceiveNodes 
= ResponseXmlDoc.GetElementsByTagName("d:datereceived");
        XmlNodeList subjectNodes 
= ResponseXmlDoc.GetElementsByTagName("d:subject");
        XmlNodeList getcontentlengthNodes 
= ResponseXmlDoc.GetElementsByTagName("a:getcontentlength");
        XmlNodeList hasattachmentNodes 
= ResponseXmlDoc.GetElementsByTagName("d:hasattachment");
        XmlNodeList hrefNodes 
= ResponseXmlDoc.GetElementsByTagName("a:href");
        XmlNodeList dateNodes 
= ResponseXmlDoc.GetElementsByTagName("d:date");

        DataTable dt 
= new DataTable();

        dt.Columns.Add(
"Subject");
        dt.Columns.Add(
"Href");
        dt.Columns.Add(
"Time");
        dt.Columns[
"Time"].DataType = Type.GetType("System.DateTime");

        
for (int j = 0; j < readNodes.Count; j++)
        {
            
//if (readNodes[j].InnerText == "1")continue;//只取未读邮件

            dt.Rows.Add(subjectNodes[j].InnerText, hrefNodes[j].InnerText, DateTime.Parse(datareceiveNodes[j].InnerText));

        }
        ResponseStream.Close();
        Response.Close();


        
return dt;
    }
    
catch
    {
        
return null;
    }
}

 

 该方法来源于网络,近日用到收藏于此。

转载于:https://www.cnblogs.com/alronzhang/archive/2010/11/09/1872594.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Js操作cookie

为什么80%的码农都做不了架构师&#xff1f;>>> 贴上一段js操作cookie的方法&#xff1a; //setCookie function setCookie(cname, cvalue, exdays) { var d new Date(); d.setTime(d.getTime() (exdays*24*60*60*1000)); //day var expires "expires…

网站主机和服务器选哪个,虚拟主机和服务器 你的网站该选择哪一个?

原标题&#xff1a;虚拟主机和服务器 你的网站该选择哪一个&#xff1f;大家在平时使用虚拟主机的时候可能并不了解他的原理&#xff0c;更是分不清楚虚拟主机和服务器之间的区别&#xff0c;不知道自己的网站该如何选择。虚拟主机是通过软件技术将一台服务器分成多个独立WEB发…

Eclipse3.6.2 64位启动报“Failed to load the JNI shared library”错的解决方法

Eclipse3.6.2 64位解压后双击运行eclipse&#xff0c;报“Failed to load the JNI shared library”错误。 如下图所示&#xff1a; 原来我的jdk是以前旧32位系统安装jdk后&#xff0c;不支持Eclipse3.6.2 64位导致报错&#xff0c;无法正常运行。从官网上&#xff1a; http://…

一个长方体玻璃容器从里面量长宽_泰来包装分享:如何设计钢边箱里面中型木包装箱...

钢边箱里面的中型木包装箱是以木质材料为主制成的有一定刚性的包装容器&#xff0c;是产品运输包装的主要容器之一&#xff0c;也是我国出口商品使用非常广泛的一种包装&#xff0c;在轻工&#xff0c;机械&#xff0c;半导体等包装领域起着不可替代的重要作用。关于钢边箱里面…

uml 中的小人

平常画uml的时候&#xff0c;经常会用到Actor, 也没仔细思考过Actor的深刻内涵今天看了程序员11月的杂志&#xff0c;里面有篇文章叫<这个小人不简单>&#xff0c;文章中强调用例技术的不同之处在于发现了"卖"-需求是研究软件怎么好卖的技能。现在对uml有了更深…

快速上手Ubuntu搭建Python编程环境

#Ubuntu 14.04 LTS已经预装Python2/3&#xff0c;可以满足基本的编程需求。#让系统支持aptitude命令sudo apt-get install aptitude -y#将系统升级到最新。sudo aptitude -y upgrade#若需导入turtle来完成一些程序&#xff0c;则需要补充安装python-tk库&#xff1a;#为Python3…

SQL SERVER 事务处理

<1>.事务的概念 事务是一个不可分割的工作逻辑单元。<2>.为什么使用事物 可以防止错误的发生。<3>.事物的作用 要么所有的操作全部完成&#xff0c;要么所有操作都不执行。<4>.什么是事物 事务是单个的工作单元 …

net start zabbix agent 服务没有相应控制功能_一步到位,服务器监控就是这么简单...

对于运维的日常工作来说&#xff0c;服务器监控是必须且最基础的一项内容。在企业基础设施运维过程中&#xff0c;管理员必须能够掌握所有服务器的运行状况&#xff0c;以便及时发现问题&#xff0c;尽可能减少故障的发生。通常我们会借助一些监控的软件来获取每个服务器的基础…

【原题】【noip 2003 T2】【动态规划】加分二叉树

问题 描述 Description 设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第i个节点的分数为di&#xff0c;tree及它的每个子树都有…

HRegionServer上工作组件汇总

HRegionServer上工作组件汇总&#xff0c;近期推出&#xff01;

发现在创建云服务器ecs实例的磁盘快照时_玩转ECS第7讲|ECS数据保护-数据备份新特性与最佳实践...

简介&#xff1a; 本文中&#xff0c;阿里云智能弹性计算专家余初武(悟元)将结合阿里云近期推出的数据备份新特性(快照极速备份、一致性快照组)来介绍云上环境如何做数据备份的最佳实践&#xff1b;适合需要构建云上架构的工程师&#xff0c;架构师和云上实施从业人员收看。关键…

用Ant编译Flex项目的几点注意事项

1. 往mxmlc中用define添加编译参数的时候特别要注意一点&#xff0c;字符串一定要包含在单引号中。 下面的写法是无法通过的&#xff1a; <mxmlc ...><define name"NS::NAME" value"Flex in air"/> </mxmlc>下面的写法才是正确的&#x…

链表打印从尾到头打印链表

在本文中,我们主要介绍链表打印的内容,自我感觉有个不错的建议和大家分享下 每日一道理 生命不是一篇"文摘"&#xff0c;不接受平淡&#xff0c;只收藏精彩。她是一个完整的过程&#xff0c;是一个"连载"&#xff0c;无论成功还是失败&#xff0c;她都不会…

1、EJB基本概念及运行环境

1、EJB是什么&#xff1f; EJB是一个用于分布式业务应用的标准服务端组件模型。采用EJB构架编写的应用是可伸缩的、事务性的、多用户安全的。采用EJB编写的应用可以部署在任何支持EJB规范的服务器平台上&#xff0c;例如&#xff1a;jboss、weblogic。 2、EJB是用来干什么的&am…

二分法求方程的根_快速求解方程的根——二分法与牛顿迭代法

今天是周四高等数学专题的第7篇文章。之前的文章和大家聊了许多数学上的理论&#xff0c;今天和大家聊点有用的东西。我们都知道&#xff0c;工业上的很多问题经过抽象和建模之后&#xff0c;本质还是数学问题。而说到数学问题就离不开方程&#xff0c;在数学上我们可以用各种推…

关于android开发环境的创建

最近想暑假找个实习单位&#xff0c;想想java android方面的应该比c、C要好点&#xff0c;然后就想重操旧业学习android 大三的时候我学过一个学期的android知识。当时创建开发环境我很快就弄好了&#xff0c;但是环境创建险些让我崩溃。 环境搭建包括四步&#xff1a; 1、JDK安…

getchar()和EOF总结

大师级经典的著作&#xff0c;要字斟句酌的去读&#xff0c;去理解。以前在看K&R的The C Programming Language(SecondEdition) 第1.5节的字符输入/输出&#xff0c;被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,感觉很有必…

Android多种View动画:EasyAndroidAnimations

&#xfeff;&#xfeff;Android多种View动画&#xff1a;EasyAndroidAnimations EasyAndroidAnimations是Android的一个动画库&#xff0c;使用起来简单方便&#xff0c;EasyAndroidAnimations将一个Android View以各种形式的动画动起来。 其中如图&#xff1a; EasyAndroidA…

python中configparser详解_Python中的ConfigParser模块使用详解

1.基本的读取配置文件-read(filename) 直接读取ini文件内容-sections() 得到所有的section&#xff0c;并以列表的形式返回-options(section) 得到该section的所有option-items(section) 得到该section的所有键值对-get(section,option) 得到section中option的值&#xff0c;返…

关于ubuntu无法启动nginx的问题

在ubuntu13.04上使用apt方式安装nginx发现无法启动nginx&#xff0c;也不报错 查看nginx运行状态&#xff0c;显示未启动 搜索无果&#xff0c;想起了原来的遇到的一个问题&#xff0c;那时候是安装了nginx和lighthttpd服务器&#xff0c;导致nginx无法启动的情况&#xff0c;提…