Проблема с получением вложения электронной почты от Exchange - PullRequest
0 голосов
/ 16 апреля 2010

Я получаю сообщение об ошибке «Удаленный сервер возвратил ошибку: (501) Не реализовано». Когда я пытаюсь использовать HttpWebRequest.GetResponse () с помощью метода GET, чтобы получить вложение электронной почты от exchange. Я пытался изменить 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 ]

0 голосов
/ 12 мая 2010

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

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

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

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

0 голосов
/ 16 апреля 2010

Есть 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;
    }
}
...