2016-12-23 3 views
0

Sidenote 1: Я видел эту тему приходят в несколько раз, прежде чем, но большинство> остаются нерешенными, а остальные не действительно связано с моей проблемой.Microsoft.Exchange.WebServices.Data.ServiceResponseException: Невозможно получить доступ к учетной записи или почтовый ящик


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; 
} 
+0

Вы пытались установить: 'service.Credentials = new WebCredentials (your_user, your_pass);'? – McNets

+0

Я думал об этом, но чем я устанавливаю имя пользователя и пароль, когда вы создаете приложение, в котором его используют несколько человек? Я попытаюсь его найти, но я прочитал, что могу технически использовать 'UseDefaultCredentials', когда вы работаете с Exchange. –

+0

Это приложение Windows Forms или приложение ASP.Net? Если это приложение Asp.Net, вам нужно настроить олицетворение с помощью проверки подлинности Windows. – Esko

ответ

0

Согласно Microsoft Dev Center, вы не можете использовать .UseDefaultCredentials = true для Exchange Online.

Замечания

Установка свойства UseDefaultCredentials истина автоматически устанавливает свойство Credentials нулевая ссылка (Nothing в визуальной Basic).

Вы не можете использовать учетные данные по умолчанию зарегистрированного пользователя, если почтовый ящик пользователя размещен в Exchange Online или Exchange Online как часть офиса 365. Вместо этого используйте свойство Credentials для установки учетных данных пользователя . Учетные данные пользователя должны быть в форме пользователя (UPN) для Exchange Online.

+0

Я не очень хорошо разбираюсь в Exchange и т. Д. Мы используем Outlook с учетной записью Microsoft Exchange. Я не думаю, что мы используем версию Office 365, только инструмент Outlook. –

+0

Где находится ваш Exchange-сервер? Локально в вашем центре обработки данных? – McNets

+0

Не на том сервере, где будет размещаться мое приложение. Скажем, мое приложение будет на сервере A и Exchange на сервере B –