Microsoft.Exchange.WebServices.Data.ServiceResponseException:无法访问帐户或邮箱

时间:2016-12-23 12:20:31

标签: c# exchangewebservices

  

Sidenote 1 :我之前已经看过几次这个话题,但大多数>没有解决,其余的与我的问题没有关系。

  

Sidenote 2 :不要对参数的使用感到困惑,我在代码中做了一些调整,因此它适合SO。这里的参数不是问题。

我试图为我开发一种从功能邮箱中读取电子邮件的方法。此时我想要访问邮箱一般,所以我看看我是否可以在自己的邮箱中阅读邮件。 然而,似乎有些不对劲。一旦它尝试运行 service.FindItems(inbox, fView) 方法,它就会给我以下错误消息:

Microsoft.Exchange.WebServices.Data.ServiceResponseException: Unable to access an account or mailbox.

此时我不确定它是与凭据有关还是与访问权限有关。以下是我正在使用的代码。

我触发了我创建的辅助方法:

FindItemsResults<Item> items = ExchangeWebServiceHelper.GetEmailsFromFolder(inboxName);

在ExchangeWebServiceHelper中,我有以下两种方法:

public static ExchangeService CreateConnection()
{
    string url = WebConfigurationManager.AppSettings["EWSAsmxUrlNp"];

    ServicePointManager.ServerCertificateValidationCallback = delegate(
        Object obj,
        X509Certificate certificate,
        X509Chain chain,
        SslPolicyErrors errors)
    {
        return true;
    };

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
    service.Url = new Uri(url);

    service.UseDefaultCredentials = true;

    return service;
}

public static FindItemsResults<Item> GetEmailsFromFolder(Mailbox mailbox)
{
    ExchangeService service = CreateConnection();

    FolderView fView = new FolderView(100);
    fView.PropertySet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.DisplayName);
    FolderId inbox = new FolderId(WellKnownFolderName.Inbox);

    FindItemsResults<Item> results = service.FindItems(inbox, fView);

    Logger.Log(mailbox.ToString());
    Logger.Log(results.TotalCount.ToString());

    return results;
}

1 个答案:

答案 0 :(得分:0)

根据Microsoft Dev Center,您无法将.UseDefaultCredentials = true用于Exchange OnLine。

  

<强>说明

     

将UseDefaultCredentials属性设置为true会自动设置   将Credentials属性设置为空引用(在Visual中为Nothing)   碱性)。

     

如果用户的邮箱作为Exchange Online或Exchange Online托管,则无法使用登录用户的默认凭据   of Office 365 。而是使用Credentials属性来设置   用户的凭据。用户的凭据必须是用户主体   Exchange Online的名称(UPN)表单。