首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > 邮件与程序开发 > 用WebDAV获取Exchange数据的WebPart > 正文

用WebDAV获取Exchange数据的WebPart

出处:www.5dmail.net 作者:www.5dmail.net 时间:2012-5-3 14:47:16

这两天为SharePoint开发了一个获取Exchange未读邮件数的WebPart。存取Exchange信息可以有很多种方法,象MAPI、CDO和WebDAV。我采用的就是WebDAV方法。WebDAV实际上是基于HTTP的一种协议,返回的标准XML数据。优点基于国际标准、方便远程应用、调试方便而且适用于任何程序语言,那缺点主要就是要自己处理返回的XML结果。

我的开发平台是.NET,主要的思路是使用System.Net.HttpWebRequest类来获取远程的WebDAV,然后分析返回的XML,提取出其中的“未读邮件”节点的数字。其中很重要的一点便是身份验证。因为Exchange的WebDAV是根据不同的用户返回不同邮箱的数据,当然就是非匿名的。因此,需要把客户端当前登录的Credential(用户身份凭据)传递到Exchange服务器上。然而我的Exchange服务器和SharePoint网站服务器是两台不同的服务器,如何才能把客户端的身份凭据通过Web服务器传递到Exchange服务器上呢?这个问题浪费了我不少时间才解决,我将再下一篇文章《使用Kerberos解决身份凭据传递问题》中详细介绍解决方法。 
参考了Exchange SDK中的Sample,获取Exchange信息的主要代码如下:

private int GetUnReadMailCount() 
{ 
string url=“http://mail.felixwoo.com/exchange/”; //指定Exchange服务器地址 
System.Net.HttpWebRequest Request; 
System.Net.WebResponse Response; 
System.Net.CredentialCache MyCredentialCache; 
string strUserName = “wuf”; //指定登录的用户名 
string strRootURI = url+strUserName ; //得到要访问邮箱的WebDAV地址 
string strPassword = “123456”; //指定该用户的密码 
string strDomain = “felixwoo.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[i].InnerText=="收件箱") 
    count=int.Parse(SizeNodes[i].InnerText); 
  } 
  ResponseStream.Close(); 
  Response.Close(); 
} 
catch(Exception) 
{ 
  // Catch any exceptions. Any error codes from the SEARCH 
  // method request on the server will be caught here, also. 
  return -1; 
} 
return count; 
}

相关文章 热门文章
  • Exchange2010 限制用户接收和发送外部邮件
  • Exchange2010批量删除关键字邮件
  • Exchange2010 设置邮箱只接收内部邮件
  • 部署Exchange2010 数据库和应用全冗余(NLB,CAS ARRAY阵列,DAG高可用组)
  • 相同域名下的Exchange 2007跨域迁移至Exchange 2010测试
  • 在迁移Lotus Notes去Exchange2007/2010之前,你需要知道什么?
  • 小议Exchange 2010的备份恢复
  • 一次Exchange 2003 数据恢复的历程
  • Microsoft Exchange 2003/2007迁移到Lotus Domino R8邮件系统
  • 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
  • 如何清除Exchange 2010邮件日志
  • Exchange 2010分支机构权限委派
  • 用C++ Builder实现电子邮件群发
  • 用Cdonts实现发送Email
  • Jmail的主要参数列表
  • ASP.NET 2.0发送电子邮件全面剖析之二
  • VC++ SMTP协议电子邮件传送剖析
  • 通过sina的smtp验证的Java发送邮件源代码
  • ASP.NET 2.0中发送电子邮件剖析之一
  • 在Asp.Net中使用SmtpMail发送邮件的方法
  • .NET环境下Email的技术介绍
  • ASP.NET 2.0发送电子邮件中存在的问题
  • 用ASP判断Email地址是否有效
  • IIS如何接收ServerXMLHTTP传过来的编码字符?
  • 自由广告区
     
    最新软件下载
  • Acronis Disk Director Server 10 正式..
  • Exchange Server 2010 SP2 正式版
  • WinWebMail 3.8.1.5 企业版
  • WinWebMail 3.8.1.5 标准版
  • win2003 exchange2003 迁移到win2008r...
  • exchange 2003迁移到exchange 2010图文..
  • Exchange 2003 迁移至Exchange 2010 完..
  • Acronis Disk Director 10
  • Paragon Partition Manager 7.0汉化版
  • Password Expiration Notifier 2.0
  • Exchange Server 2003/7升级到Exchang...
  • Exchange Server 2010安全性-防垃圾邮...
  • 今日邮件技术文章
  • Exchange2010 限制用户接收和发送外部...
  • 用WebDAV获取Exchange数据的WebPart
  • Exchange2010批量删除关键字邮件
  • Exchange2010 设置邮箱只接收内部邮件
  • 部署Exchange2010 数据库和应用全冗余...
  • 相同域名下的Exchange 2007跨域迁移至...
  • 在迁移Lotus Notes去Exchange2007/201...
  • 小议Exchange 2010的备份恢复
  • 如何让Hyper-V支持Red Hat
  • 一次Exchange 2003 数据恢复的历程
  • 好评如潮:TurboMail邮件系统V5.0发布
  • TURBOMAIL反垃圾邮件清洁工,还你一个...
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们
    版权所有:邮件技术资讯网©2003-2016 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备09060656号