Exchange Web Services Managed API 1.1很省事
如果想通过Exchange 2007/2010 EWS读取或者写入数据,比如快速读取未读邮件、任务等数目,读取邮件、任务标题等等,不用再去写那么多代码了,交给Exchange Web Services Managed API 吧,基本上你不怎么写代码了,而且安全。
如下示例: 以前代码:
GetFolderType request = new GetFolderType();
request.FolderShape = new FolderResponseShapeType();
request.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;
DistinguishedFolderIdType inboxId = new DistinguishedFolderIdType();
inboxId.Id = DistinguishedFolderIdNameType.inbox;
request.FolderIds = new BaseFolderIdType[] { inboxId };
GetFolderResponseType response = serviceBinding.GetFolder(request);
FolderInfoResponseMessageType responseMessage =
response.ResponseMessages.Items[0] as FolderInfoResponseMessageType;
if (responseMessage.ResponseClass == ResponseClassType.Success)
{
FolderType inbox = responseMessage.Folders[0] as FolderType;
}
现在代码:
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
代码看起来简单清爽多了吧!!!接下来只要点点就是你想要的东西: unread = inbox.UnreadCount.ToString();
更多请参见如下代码示例片断:其中红色部分标示,WellKnownFolderName.Tasks;//任务或者收件箱等等,枚举搞定,如果想使用高级的账户模拟功能,可能需要更高级版本的Exchange 比如2010 SP1,如果达不到代码自动会报出错误,版本越低使用功能就越少。比如自动发现(不用写IP地址什么的就一个地址搞定):
ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential("name", "pwd", "domain");
service.AutodiscoverUrl("someone@contoso.com");
看来已经很省事了呢。。。。以下是其它代码片断:
using System.Net;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Exchange.WebServices.Data;
//Call SSL Web service must added!!!
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//"https://192.168.0.68/ews/exchange.asmx"
EWSImpersonation(U_Name + "@contoso.com", U_Pwd, "192.168.0.68", false);
/// <summary>
/// 读取所有Exchange对象数目,不使用模拟功能
/// </summary>
/// <param name="aemail">标准邮件地址</param>
/// <param name="apwd">密码</param>
/// <param name="serverName">服务器名称</param>
/// <param name="useAutodiscover">是否自动发现服务器URL</param>
public void EWSImpersonation(string aemail, string apwd, string serverName, bool useAutodiscover)
{
try
{
//Call SSL Web service must added!!!
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);//如果是Exchange 2010,则切换到2010
service.Credentials = new WebCredentials(aemail, apwd);
//service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);
if (useAutodiscover)
service.AutodiscoverUrl(aemail);
else
{
string[] servers = serverName.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < servers.Length; i++)
{
try
{
service.Url = new Uri("https://" + servers[i] + "/ews/exchange.asmx");
break;
}
catch
{
}
}
}
service.PreAuthenticate = true;
#region ReadEmail
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);//发件箱
all = inbox.TotalCount.ToString();
unread = inbox.UnreadCount.ToString();
#endregion
#region ReadTask
//ItemView view = new ItemView(2048);
//view.PropertySet = new PropertySet(BasePropertySet.IdOnly, TaskSchema.IsComplete);
//SearchFilter.IsEqualTo filter = new SearchFilter.IsEqualTo(TaskSchema.IsComplete, "False");
TasksFolder tasks = TasksFolder.Bind(service, WellKnownFolderName.Tasks);//任务
//FindItemsResults<Item> res = tasks.FindItems(filter, view);
//SearchFolder searchFolder = new SearchFolder(service);
//searchFolder.DisplayName = "My search folder";
//searchFolder.SearchParameters.RootFolderIds.Add(WellKnownFolderName.Tasks);
//searchFolder.SearchParameters.SearchFilter = new SearchFilter.SearchFilterCollection(
// LogicalOperator.And,
// new SearchFilter.IsEqualTo(TaskSchema.IsComplete, "false"));
//searchFolder.Save(WellKnownFolderName.SearchFolders);
allTasks = tasks.TotalCount.ToString();
undo = tasks.TotalCount.ToString();//tasks.UnreadCount.ToString() aways = 0,so use TotalCount!!!!
#endregion
}
catch (Exception ex)
{
isError = true;
errorMessage = ex.Message + ex.StackTrace;
}
}
/// <summary>
/// 读取所有Exchange对象数目,使用模拟功能(Only for Exchange2010 or SP1)
/// </summary>
/// <param name="email">要模拟和读取用户的Eamil</param>
/// <param name="aemail">管理员标准邮件地址</param>
/// <param name="apwd">管理员密码</param>
/// <param name="serverName">服务器名称</param>
/// <param name="useAutodiscover">是否自动发现服务器URL</param>
public void EWSImpersonation(string email, string aemail, string apwd, string serverName, bool useAutodiscover)
{
try
{
//Call SSL Web service must added!!!
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new WebCredentials(aemail, apwd);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);
if (useAutodiscover)
service.AutodiscoverUrl(aemail);
else
{
string[] servers = serverName.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < servers.Length; i++)
{
try
{
service.Url = new Uri("https://" + servers[i] + "/ews/exchange.asmx");
break;
}
catch
{
}
}
}
service.PreAuthenticate = true;
#region ReadEmail
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);//发件箱
all = inbox.TotalCount.ToString();
unread = inbox.UnreadCount.ToString();
#endregion
#region ReadTask
Folder tasks = Folder.Bind(service, WellKnownFolderName.Tasks);//任务
allTasks = tasks.TotalCount.ToString();
undo = tasks.UnreadCount.ToString();
#endregion
}
catch (Exception ex)
{
isError = true;
errorMessage = ex.Message + ex.StackTrace;
}
}
/// <summary>
/// 忽略SSL证书请求
/// </summary>
/// <param name="sender"></param>
/// <param name="certificate"></param>
/// <param name="chain"></param>
/// <param name="errors"></param>
/// <returns></returns>
public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
msn: pccai1983@hotmail.com

浙公网安备 33010602011771号