Проблемы с получением вложения электронной почты от Exchange

При попытке использовать HttpWebRequest.GetResponse () с помощью метода GET для получения вложения электронной почты с биржи появляется сообщение об ошибке "Удаленный сервер возвратил ошибку: (501) Не реализовано". Я пытался изменить HttpVersion и не думаю, что это проблема с разрешениями, так как я могу искать в папке "Входящие".

Я знаю, что мои учетные данные верны, так как они используются для получения HREF с использованием HttpWebRequest.Method = Поиск по входящей почте ( https://mail.mailserver.com/exchange/testemailaccount/Inbox/).

HREF = https://mail.mailserver.com/exchange/testemailaccount/Inbox/testemail.EML/attachment.csv

Образец кода:

HttpWebRequest req = (System.Net.HttpWebRequest)  HttpWebRequest.CreateHREF);                
req.Method = "GET";
req.Credentials = this.mCredentialCache;
string data = string.Empty;
using (WebResponse resp = req.GetResponse())
{
    Encoding enc = Encoding.Default;
    if (resp == null)
    {
        throw new Exception("Response contains no information.");
    }

    using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.ASCII))
    {
        data = sr.ReadToEnd();
    }
}

2 ответа

Похоже, вы используете WebDAV против Exchange 2007. По умолчанию в Exchange 2007 WebDAV не включен. Так что вы можете:

1) Включите WebDAV на вашем сервере Exchange 2007.

2) Переключитесь на использование веб-служб Exchange.

Я бы порекомендовал вариант 2, так как вы используете C#, поскольку существует API-интерфейс Managed EWS, который значительно упрощает задачу такого рода, чем использование WebDAV. Это также позволяет вам в конечном итоге ориентироваться на Exchange 2010, где WebDAV был полностью удален.

Есть 2 возможных решения:

  1. Попробуйте использовать протокол POP3 вместо HTTP. Вы можете попробовать реализовать это самостоятельно (см., Например, "Как использовать POP3 в C#") или использовать готовую библиотеку POP3 с поддержкой SSL (например, POP3Client) или взглянуть на этот вопрос.

  2. Также ваша ошибка, вероятно, из-за того, что не обрабатывает соединения https. Попробуйте добавить этот код:

    ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy ();

Вот реализация класса:

internal class AcceptAllCertificatePolicy : ICertificatePolicy
{
    public AcceptAllCertificatePolicy()
    {
    }
    public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert,
    WebRequest wRequest, int certProb)
    {
        //Allways accept
        return true;
    }
}
Другие вопросы по тегам