Электронная почта обмена доступа в C#

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

Вы можете найти больше информации здесь: Максимальное число параллельных http-подключений в браузере?

14
задан juan 14 May 2009 в 19:39
поделиться

8 ответов

Зависит от версии Exchange. WebDAV работает с 2000 по 2007 год, но для веб-служб требуется 2007+.

С ними, вероятно, проще всего начать работать. CDO - еще один вариант, но он не поддерживается в C # , поэтому вам придется выйти из процедуры .

Exchange также имеет поставщика OLEDB , но я никогда не использовал его - однако он поддерживается .NET .

6
ответ дан 1 December 2019 в 07:06
поделиться

Если вы используете Exchange 2007 и у вас включены веб-службы, это довольно просто. Я добавил классическую веб-ссылку в стиле 2.0 в свой проект VS2008, и я могу получать такие почтовые сообщения:

// exchange 2007 lets us use web services to check mailboxes.
using (ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding())
{
    ICredentials creds = new NetworkCredential("user","password");
    exchangeServer.Credentials = creds;
    exchangeServer.Url = "https://myexchangeserver.com/EWS/Exchange.asmx";
    FindItemType findItemRequest = new FindItemType();
    findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

    // define which item properties are returned in the response
    ItemResponseShapeType itemProperties = new ItemResponseShapeType();
    itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
    findItemRequest.ItemShape = itemProperties;

    // identify which folder to search
    DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
    folderIDArray[0] = new DistinguishedFolderIdType();
    folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;

    // add folders to request
    findItemRequest.ParentFolderIds = folderIDArray;

    // find the messages
    FindItemResponseType findItemResponse = exchangeServer.FindItem(findItemRequest);

    // read returned
    FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];
    ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();
    folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;
    ItemType[] items = folderContents.Items;

    // if no messages were found, then return null -- we're done
    if (items == null || items.Count() <= 0)
        return null;

    // FindItem never gets "all" the properties, so now that we've found them all, we need to get them all.
    BaseItemIdType[] itemIds = new BaseItemIdType[items.Count()];
    for (int i = 0; i < items.Count(); i++)
        itemIds[i] = items[i].ItemId;

    GetItemType getItemType = new GetItemType();
    getItemType.ItemIds = itemIds;
    getItemType.ItemShape = new ItemResponseShapeType();
    getItemType.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
    getItemType.ItemShape.BodyType = BodyTypeResponseType.Text;
    getItemType.ItemShape.BodyTypeSpecified = true;

    GetItemResponseType getItemResponse = exchangeServer.GetItem(getItemType);
    ItemType[] messages = new ItemType[getItemResponse.ResponseMessages.Items.Count()];

    for (int j = 0; j < messages.Count(); j++)
        messages[j] = ((ItemInfoResponseMessageType)getItemResponse.ResponseMessages.Items[j]).Items.Items[0];

    return messages;
}

Переменная "messages" будет массивом объектов ItemType, возвращаемых из обмена, которые имеют все свойства, которые вы ожидаете для почтового сообщения (Body, Attachments и т. д.). Надеюсь, это поможет!

18
ответ дан 1 December 2019 в 07:06
поделиться

Я полагаю, ваша проблема в том, что ваш сервер обмена поддерживает только аутентификацию NTLM и не позволяет аутентификацию с использованием обычного текста? Или вы можете использовать неправильное соглашение об имени пользователя. Например, вы можете попробовать использовать формат имя пользователя @ домен, где домен - это внутренний NT-домен, который может не совпадать с вашим интернет-доменом.

В этом случае поищите библиотеку, поддерживающую NTLM.

Шаги по тестированию через telnet

Перейдите в командную строку введите: telnet my.server.com 110 вы должны получить такой ответ от вашего сервера обмена + OK Сервер Microsoft Exchange Server 2003 POP3 версии 6.5.7638.1 (my.server.com) готов.

введите: CAPA это должно вернуть список возможностей, которые поддерживает ваш сервер обмена. CAPA + OK Далее следует список возможностей ВЕРХНЯЯ USER PIPELINING ИСКАТЬ НИКОГДА UIDL SASL NTLM .

Обратите внимание, что у меня не отображается ОБЫЧНАЯ

Вот ответ от почтового сервера, который делает + OK, Dovecot ready. CAPA + OK CAPA ВЕРХНЯЯ UIDL RESP-КОДЫ PIPELINING STLS USER SASL PLAIN .

Если ваш ответ не включает ОБЫЧНЫЙ, остановитесь, так как вам нужна библиотека, поддерживающая тип SPA

: user myusername ИЛИ введите: user myusername@domain.corp, заменив domain.corp своим доменом

. Затем вы должны получить + OK

Введите: pass mypass

Вы должны получить ответ + OK

type: list

Должен получить список писем. Это может помочь понять, связана ли ваша проблема с форматом имени пользователя.

3
ответ дан 1 December 2019 в 07:06
поделиться

Вам необходимо использовать Exchange SDK , если POP3 не включен на сервере Exchange. Другой вариант - использовать WebDAV .

1
ответ дан 1 December 2019 в 07:06
поделиться

Вы можете использовать эту библиотеку: http://www.dimastr.com/redemption/

1
ответ дан 1 December 2019 в 07:06
поделиться

Вы можете использовать EWS (веб-службы Exchange), начиная с Exchange 2007. Кажется, они всегда устанавливаются и лучше поддерживаются чем Webdav.

Вы можете просто импортировать веб-службу со своего сервера Exchange (найдите asmx-файл в каталоге установки). Вы можете скачивать EML-файлы из своих писем и делать многое другое!

1
ответ дан 1 December 2019 в 07:06
поделиться

Другой вариант - настроить Exchange для включения IMAP4. Существуют сторонние библиотеки IMAP4 для .NET, например rebex.

1
ответ дан 1 December 2019 в 07:06
поделиться

Использование EWS непосредственно в управляемом коде (VB.net / C #) неуклюже, чтобы сказать лучшее.

Я возился с этим уже несколько дней и пришел пришли к выводу, что лучше построить свои собственные классы-оболочки вокруг API, сделав службы доступными в одной или двух строках кода, а не на странице с текущей реализацией.

Угадайте, что? Microsoft опередила меня: первый кандидат на выпуск управляемого API веб-служб Exchange доступен для загрузки здесь .

Установите, зарегистрируйте ссылку на dll (\ Program Files \ Microsoft \ Exchange \ Web Services \ 1.0 \ Micorosft.Exchange.WebServices.dll) и импортируйте пространство имен (Microsoft.Exchange.WebServices.Data), и все готово.

5
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: