c # программно читает электронную почту с сервера Exchange - PullRequest
9 голосов
/ 09 марта 2011

При поиске в Интернете вы найдете очень простые ответы на вопрос «Как читать электронные письма программно» ... Все сайты объясняют почти то же, что и эта страница. http://omegacoder.com/?p=454

// depends from Exchange server version      
        service.Credentials = new NetworkCredential("MDR", "password", "zzz");
        service.AutodiscoverUrl("mdr@zzz.be");
        object o = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
        foreach (Item item in findResults.Items)
        {
            Console.WriteLine(item.Subject);
        }

происходит сбой при выполнении строки autodiscoverURL. Ошибка говорит: «Служба автообнаружения не может быть найдена».

Так что я погуглил дальше и нашел этот сайт от Microsoft https://www.testexchangeconnectivity.com/#&&/wEXAQUBcwUBME93h2+JjI0+MV2gTqcRL0g43z9m Здесь вы можете проверить свой почтовый сервер .... Когда я передаю параметры, я получаю ошибку ниже ....

Но я все еще не понимаю, в чем проблема? Нужно ли добавлять запись в DNS? Может кто-нибудь помочь?

Attempting to test potential Autodiscover URL https://autodiscover.zzz.be/AutoDiscover/AutoDiscover.xml
 Testing of this potential Autodiscover URL failed.
 Test Steps
 Attempting to resolve the host name autodiscover.ncb.be in DNS.
 The host name resolved successfully.
 Additional Details
 IP addresses returned: 213.246.192.205

Testing TCP port 443 on host autodiscover.ncb.be to ensure it's listening and open.
 The specified port is either blocked, not listening, or not producing the expected response.
  Tell me more about this issue and how to resolve it
 Additional Details
 A network error occurred while communicating with the remote host.
Exception details:
Message: No connection could be made because the target machine actively refused it 213.246.192.205:443
Type: System.Net.Sockets.SocketException
Stack trace:
at System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
at Microsoft.Exchange.Tools.ExRca.Tests.TcpPortTest.PerformTestReally()




Attempting to contact the Autodiscover service using the HTTP redirect method.
 The attempt to contact Autodiscover using the HTTP Redirect method failed.
 Test Steps
 Attempting to resolve the host name autodiscover.zzz.be in DNS.
 The host name resolved successfully.
 Additional Details
 IP addresses returned: 213.246.192.205

Testing TCP port 80 on host autodiscover.zzz.be to ensure it's listening and open.
 The port was opened successfully.
ExRCA is checking the host autodiscover.zzz.be for an HTTP redirect to the Autodiscover service.
 ExRCA failed to get an HTTP redirect response for Autodiscover.
 Additional Details
 A Web exception occurred because an HTTP 404 - NotFound response was received from IIS7.



Attempting to contact the Autodiscover service using the DNS SRV redirect method.
 ExRCA failed to contact the Autodiscover service using the DNS SRV redirect method.
 Test Steps
 Attempting to locate SRV record _autodiscover._tcp.ncb.be in DNS.
 The Autodiscover SRV record wasn't found in DNS.
  Tell me more about this issue and how to resolve it

Ответы [ 4 ]

17 голосов
/ 09 марта 2011

Вам не обязательно использовать автообнаружение, если вы уже знаете адрес своего сервера обмена. Вместо этого попробуйте следующее (для получения дополнительной информации посмотрите здесь :

service.Url = new Uri("https://hostname/EWS/Exchange.asmx");

Замените "hostname" на имя хоста для вашего сервера обмена.

2 голосов
/ 20 октября 2011

Надеюсь, у вас уже есть решение к этому времени. Это просто, чтобы помочь любому, кто наткнулся на этот пост. Я нашел решение в одной из статей * technet , я настроен на то, чтобы подойти ко мне, и работает нормально для меня.

Просто замените строку в вашем коде следующим:

service.AutodiscoverUrl("user@yourdomain.com",
delegate
{
     return true;
});

У меня были другие проблемы, но они не связаны с этим битом.

Happy Coding,

Санджай.

1 голос
/ 28 февраля 2013

У меня была такая же проблема с AutoDiscover.В этом нет необходимости, вы можете указать свой URL-адрес, например

    Uri myUri = new Uri("https://Hostname/ews/exchange.asmx");
    userData.AutodiscoverUrl = myUri;
    service.Url = myUri;

. В качестве имени хоста вы можете указать IP-адрес сервера, например, 192.168.100.10

В качестве альтернативы, узнать, какое имя хоста вашего сервера Exchange (фактически весь URL для использования) если вы используете Outlook, перейдите на панель запуска вашего компьютера, где отображаются дата и время, вы найдете значок Outlook, удерживайте Ctrl + щелкните правой кнопкой мыши значок Outlook и нажмите «Тест».Автоконфигурация электронной почты »

Установите флажок« Использовать автообнаружение ».Введите адрес электронной почты, размещенный на этом сервере Exchange вместе с его паролем, и вы получите несколько URL-адресов.Используйте 1 с надписью «URL-адрес службы доступности»

0 голосов
/ 01 декабря 2011

Учтите, что передаваемые учетные данные должны иметь разрешение на данный почтовый ящик / сервер Exchange.В моем случае использование другого набора учетных данных, которые разрешены правильно, работает, но не для служебной учетной записи, которую я пытаюсь заставить работать.Как только я узнаю, для какой именно учетной записи необходимо получить разрешение, я обновлю ее здесь.

Обновление: моей проблемой была учетная запись службы из домена, отличного от домена, в котором работает экземпляр Exchange 2007, дажехотя между ними есть доверительные отношения.Я обнаружил, что это известная проблема в Exchange 2007, связанная с поиском учетных записей в его лесу.В итоге пришлось создать идентичную учетную запись службы (имя / пароль) в домене, на котором сидит сервер обмена, и указать имя пользователя как {exchange_domain} {service_account_name}.Служба Windows, которая вызывает EWS, запускается как {original_domain} {service_account_name}.

. Для справки, исключение было: Microsoft.Exchange.WebServices.Data.ServiceResponseException: не удалось получить действительную информацию Active Directory для вызывающей учетной записи.Убедитесь, что это действительная учетная запись Active Directory.

...