2010-04-15 84 views
0

當我嘗試使用GET方法使用HttpWebRequest.GetResponse()獲取電子郵件附件時,出現錯誤消息「遠程服務器返回了錯誤:(501)Not Implemented來自交換。我試圖改變HttpVersion,並不認爲這是一個權限問題,因爲我可以搜索收件箱。無法從Exchange獲取電子郵件附件

我知道我的憑據是正確的,因爲它們用於使用收件箱中的HttpWebRequest.Method = Search(https://mail.mailserver.com/exchange/testemailaccount/Inbox/)獲取HREF。

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#"例如),也可以使用支持SSL(POP3Client例如)現成的POP3庫或採取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

看樣子你在Exchange 2007中使用WebDAV對Exchange 2007中默認情況下,不支持WebDAV。因此,您可以:

1)在Exchange 2007 Server上啓用WebDAV。

2)切換到使用Exchange Web服務。

我會推薦選項2,因爲你使用的是C#,因爲有Managed EWS API這使得這種任務比使用WebDAV更簡單。它還允許您最終將Exchange 2010的目標WebDAV完全刪除。

相關問題