C# 调用Exchange2007 WebService 获取已知Exchange用户的邮件未读数

2013年4月28日 | 分类: Exchange, 开发 | 标签: , , , ,

Exchange2007服务器提供了webservice,我们可以方便的在.NET程序中添加该引用,然后就可以方便的实现邮件的抓取,发送,删除等功能.

本文讲述是是如何在只知道邮箱用户名的情况下引用 Exchange2007中的webservice 来编写代码实现获取未读邮件数的需求

 

Exchange2007中的webservice是置于Exchange2007服务器IIS中的EWS站点中.

所在在开发之前需要引用 Exchange2007 的webservice

1. 新建一个站点,然后在VS环境解决方案管理器右键点击添加 exchange webservice 的引用, 输入Exchange 2007服务器的 EWS 地址:http://yourmailserver/EWS/Services.wsdl ,如果是在服务器在内网域中,添加的过程中要求输入已授权的域帐号和密码。

2. 修改 Exchange2007 WebService名称.

3. 添加成功以后再项目中导入该命名空间以其他必须的命名空间 ;

using namespace.Mail_EWS

说明:namespace 是当前代码所在的命名空间,Mai_EWS是 Exchange2007 WebService的名称

4. 下面是具体的代码:

使用C#获取邮箱用户的邮件未读数:

  1. /// <summary>
  2.     /// Services:获取Exchange邮箱未读邮件数
  3.     /// </summary>
  4.     [WebService(Namespace = "GetMailCount")]
  5.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  6.     [ToolboxItem(false)]
  7.     public class Service1 : System.Web.Services.WebService
  8.     {
  9.         [WebMethod(Description = "获取Exchange邮箱未读邮件数")]
  10.         public int GetNewMailCount(string userName)
  11.         {
  12.          ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); //((obj,certificate,china,errors) => true);
  13.          ExchangeServiceBinding tESB = new ExchangeServiceBinding();
  14.          ICredentials tIC = new NetworkCredential(ConfigurationManager.AppSettings["ExchangePowerUserName"],ConfigurationManager.AppSettings["ExchangePowerUserPassword"], ConfigurationManager.AppSettings["ExchangePowerUserDomain"]);
  15.          tESB.Credentials = tIC;
  16.          tESB.Url = ConfigurationManager.AppSettings["ExchangeWebServicesUrl"];
  17.          tESB.ExchangeImpersonation = new ExchangeImpersonationType();
  18.          tESB.ExchangeImpersonation.ConnectingSID = new ConnectingSIDType();
  19.          tESB.ExchangeImpersonation.ConnectingSID.PrincipalName = userName + ConfigurationManager.AppSettings["ExchangeMailSuffix"];
  20.          FindItemType findItemRequest = new FindItemType();
  21.          findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
  22.          // Define which item properties are returned in the response
  23.          ItemResponseShapeType itemProperties = new ItemResponseShapeType();
  24.          //specify the return shape limited to ”Id”
  25.          itemProperties.BaseShape = DefaultShapeNamesType.IdOnly;
  26.          findItemRequest.ItemShape = itemProperties;  // Add properties shape to request
  27.          // Identify which folders to search to find items
  28.          DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
  29.          folderIDArray[0] = new DistinguishedFolderIdType();
  30.          folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;
  31.          // Add folders to request
  32.          findItemRequest.ParentFolderIds = folderIDArray;
  33.          //Create unread only restriction
  34.          RestrictionType restriction = new RestrictionType();
  35.          IsEqualToType isEqualTo = new IsEqualToType();
  36.          PathToUnindexedFieldType pathToFieldType = new PathToUnindexedFieldType();
  37.          pathToFieldType.FieldURI = UnindexedFieldURIType.messageIsRead;
  38.          FieldURIOrConstantType constantType = new FieldURIOrConstantType();
  39.          ConstantValueType constantValueType = new ConstantValueType();
  40.          constantValueType.Value = ”0″;
  41.          constantType.Item = constantValueType;
  42.          isEqualTo.Item = pathToFieldType;
  43.          isEqualTo.FieldURIOrConstant = constantType;
  44.          restriction.Item = isEqualTo;
  45.          findItemRequest.Restriction = restriction;
  46.          FindItemResponseType findItemResponse = tESB.FindItem(findItemRequest);
  47.          FindItemResponseMessageType folder =(FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];
  48.          return folder.RootFolder.TotalItemsInView;
  49.          }

转自:http://blog.csdn.net/yinyaling/article/details/5265012

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。

目前还没有任何评论.
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。