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

WebDAV方式访问Exchange 2003收件箱程序相关推荐

  1. gmail收件箱标签设置_通过多个收件箱实验室有效管理您的Gmail

    gmail收件箱标签设置 Most people have more than one email account and if you are using Gmail it's easy to ge ...

  2. SSL方式获取邮箱收件箱

    2019独角兽企业重金招聘Python工程师标准>>> QQ邮箱是强制要求使用SSL方式获取收件箱的: package emailUtil;import java.io.FileNo ...

  3. 使用C#.NET通过MAPI访问收件箱

    本文讨论了如何使用C#.NET通过MAPI访问收件箱. 它还讨论了如何将附件存储在本地目录中,如何在收件箱中创建文件夹 需要添加参考 Microsoft CDO 1.21库到项目 //Declarat ...

  4. .net mapi_使用C#.NET通过MAPI访问收件箱

    .net mapi 本文讨论了如何使用C#.NET通过MAPI访问收件箱. 它还讨论了如何将附件存储在本地目录中,如何在收件箱中创建文件夹 需要添加参考 Microsoft CDO 1.21库到项目 ...

  5. outlook收件箱显示_在Outlook 2003/2007中快速清理收件箱

    outlook收件箱显示 If you get hundreds of emails every day your inbox can fill up quickly. Outlook 2003 ha ...

  6. Outlook 2003 中使用收件箱修复工具恢复电子邮件

    注意:下面列出的示例涉及到对 .pst 文件使用收件箱修复工具.这些过程同样适用于脱机文件夹 (.ost) 文件.要查找脱机文件夹 (.ost) 文件,在选定扫描的文件中单击以选择脱机文件夹(*.os ...

  7. outlook收件箱显示_Outlook中的垃圾电子邮件,混乱邮件和重点收件箱有什么区别?

    outlook收件箱显示 If you use a recent version of Outlook, you've probably noticed a Junk Email folder, a ...

  8. (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

    需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估 ...

  9. 现在那个拦截捆绑软件比较好_捆绑您的收件箱以更好地开发

    现在那个拦截捆绑软件比较好 by Den McHenry 丹·麦克亨利(Den McHenry) 捆绑您的收件箱以更好地开发 (Bundle-Up Your Inbox to be a Better ...

最新文章

  1. [转载]登录功能测试总结
  2. 从未这么明白的设计模式(一):单例模式
  3. r语言工作路径linux,R语言实用基础知识_工作路径-注释-安装和卸载R包_2019-12-01...
  4. ad怎么批量改元器件封装_Altium Designer 批量修改元件封装的方法(修正)
  5. 米线店结账程序 装饰着模式_实验报告2_装饰者模式
  6. 【poj3070】Fibonacci
  7. java控制台打印输出改个颜色吧
  8. 字段计算器中的功能_Flask实践:计算器
  9. Unity 图片开启不同选项内存占用
  10. 九大背包问题专题--背包问题求具体方案数
  11. vb精简版12M大小含msinet.ocx控件
  12. 百度文库免点券下载方法
  13. 决策树分类算法(包含隐形眼镜分类的代码)
  14. PHP编写简单的注册登录页面
  15. 路由期末复习(二)—配置命令
  16. android 开发日历功能,Android开发之如何实现日历控件
  17. matlab 期权delta,欧式期权定价(BS方法delta值和隐含波动率计算)
  18. laravel数据迁移
  19. 优课在线 实境英语作业1Unit 1-5
  20. HTML——3D旋转+动画 旋转木马案例

热门文章

  1. 机器学习--最基础的最常用的聚类算法
  2. ERROR: Can't get master address from ZooKeeper; znode data == null
  3. uboot,eboot和bootloader的联系
  4. mysql cookbook
  5. phpStorm中的unescaped xml character问题
  6. rasa聊天机器人_Rasa-X是持续改进聊天机器人的独特方法
  7. 机器学习经典算法实践_服务机器学习算法的系统设计-不同环境下管道的最佳实践
  8. NB-IoT SNR RSRQ RSRP等信号参数解释
  9. 64位ubuntu kylin 16.04下tiny4412开发环境搭建
  10. 万能驱动xp离线版_教你用SC封装软件来封装XP系统