2010-04-15 2 views
0

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

Я знаю, что мои учетные данные верны, поскольку они используются для получения 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(); 
    } 
} 

ответ

0

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

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

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

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

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

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

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

Смежные вопросы