为什么通过Exchange Web Service EWS API访问邮箱会失败?

时间:2016-03-17 05:49:15

标签: c# ssis exchange-server exchangewebservices

您好我在使用EWS API访问outloook Office 365邮箱收件箱时遇到了严重问题。我正在使用SSIS包脚本任务来运行代码以连接到Office365上的emailID,但它只是随机失败或成功运行。 我已经实现了如下

protected void ConnectToExchangeServer(string emailID, stringpassword)
{
    ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

    exchange = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
    //exchange.Credentials = new WebCredentials("USERNAME", "PASSWORD", "DOMAIN");

    exchange.Credentials = new WebCredentials(emailID, password);

    //Hair splitting problem here in autodiscoverurl, sometimes runs successfully , 
    //connects to inbox and reads mail and sometimes fails randomly 
    //throwing error Autodiscover could not find location.

    exchange.AutodiscoverUrl(emailID, RedirectionUrlValidationCallback);

    //exchange.Credentials = new WebCredentials("USERNAME", "PASSWORD", "DOMAIN");

    //exchange.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

 }

  private static bool RedirectionUrlValidationCallback(){...}

  private static bool CertificateValidationCallBack(object sender,
        System.Security.Cryptography.X509Certificates.X509Certificate certificate,
        System.Security.Cryptography.X509Certificates.X509Chain chain,
        System.Net.Security.SslPolicyErrors sslPolicyErrors){..}

这个问题可能是什么原因?我没有网络管理知识所以请指导我如何检查我的请求遭到拒绝的问题?

1 个答案:

答案 0 :(得分:0)

您是否收到类似“无法找到自动发现服务?”的错误?不幸的是,这是一个可以掩盖潜在错误的全能错误。如果它是间歇性的,即相同的SMTP +凭证有时工作而不是其他工作,则可能是超时情况。或者,如果您实际上在程序中的多个线程上调用此相同的函数,一旦您进入大约20个同时调用,EWS将开始限制您的瞬态错误。

了解出错的唯一方法是在ExchangeService对象上启用跟踪,并定义一个处理程序以打印出来自AutodiscoverUrl调用步骤的XML。很容易找到网络上的内容,而且添加起来也不错。如果这将是一个生产级应用程序,那么能够动态启用是件好事。