2012-04-10 16 views
0

次のコードを使用して、Exchange 2003サーバーから電子メールを取得しています。すべてが金曜日に働いていましたが、今は失敗します。私はtargetDate変数にそれを縮小しているいくつかの調査から日付を指定するとWebDAV Exchange 2003が失敗する

。日付が4月になっている場合、サーバーから400のバックで失敗したようです。私はこのラインをコメントして、2012年3月29日、2012年4月1日、2012年4月10日(今日)に様々な日付を試してみました。

病気のエイプリルフールのジョークのいくつかの種類?

コード自体は、この資料から派生されていますhttp://www.codeproject.com/Articles/42458/Using-Exchange-2003-with-Webdav-Send-Retrieve-Atta

public XmlDocument GetMailAll() 
    { 
     HttpWebRequest request = default(HttpWebRequest); 
     HttpWebResponse response = default(HttpWebResponse); 
     string rootUri = null; 
     string query = null; 
     byte[] bytes = null; 

     Stream requestStream = default(Stream); 
     Stream responseStream = default(Stream); 
     XmlDocument xmlDoc = default(XmlDocument); 
     xmlDoc = new XmlDocument(); 
     try 
     { 
      DateTime targetDateTime = DateTime.Today.AddDays(-5); 
      String targetDate = ""+targetDateTime.Year + "-" + targetDateTime.Month + "-" + targetDateTime.Day; 

      rootUri = server + "/Exchange/" + alias + "/" + inbox; 
      query = "<?xml version=\"1.0\"?>" 
         + "<D:searchrequest xmlns:D = \"DAV:\" xmlns:m=\"urn:schemas:httpmail:\">" 
         + "<D:sql>SELECT \"urn:schemas:httpmail:hasattachment\", \"DAV:displayname\", " 
         + "\"urn:schemas:httpmail:from\", \"urn:schemas:httpmail:subject\", " 
         //+ "\"urn:schemas:httpmail:htmldescription\"," //Return full body (not necessary right now) 
         + "\"urn:schemas:httpmail:datereceived\", \"urn:schemas:httpmail:read\" FROM \"" + rootUri 
         + "\" WHERE \"DAV:ishidden\" = false " 
         + "AND \"DAV:isfolder\" = false " 
         //+ "AND \"urn:schemas:httpmail:read\" = false" 
         + "AND \"urn:schemas:httpmail:datereceived\" >= CAST(\"" + targetDate + "T00:00:000Z\" AS 'dateTime.tz')" 
         + "</D:sql></D:searchrequest>"; 
      request = (HttpWebRequest)WebRequest.Create(rootUri); 
      request.Timeout = 5000; 
      request.Credentials = new NetworkCredential(alias, password, domain); 
      request.Method = "SEARCH"; 
      request.ContentType = "text/xml"; 
      request.Headers.Add("Translate", "F"); 
      bytes = System.Text.Encoding.UTF8.GetBytes(query); 
      request.ContentLength = bytes.Length; 

      requestStream = request.GetRequestStream(); 
      requestStream.Write(bytes, 0, bytes.Length); 
      requestStream.Close(); 
      response = (HttpWebResponse)request.GetResponse(); 

      authCookies = new List<Cookie>(); 
      foreach(Cookie cookie in response.Cookies) 
      { 
       authCookies.Add(cookie); 
      } 

      responseStream = response.GetResponseStream(); 
      xmlDoc.Load(responseStream); 
      responseStream.Close(); 
     } 
     catch (WebException ex) 
     { 
      if (ex.Response == null) 
      { 
       throw new Exception(); 
      } 
      else if ((ex.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized) 
      { 
       throw new ExchangeCatastrophicException(); 
      } 
      else 
      { 
       throw new ExchangeFailedException(); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
     return xmlDoc; 
    } 

答えて

0

は、最後にそれが働いてしまいました。 00::T00を含むキャストする正確なtargetDate .. Z部分はhttp://msdn.microsoft.com/en-us/library/aa123600%28v=exchg.65%29.aspx

上の仕様と一致している必要があり、私は今持っている:秒の部分があることを

DateTime targetDateTime = DateTime.Today; 
string targetDate = targetDateTime.ToString("yyyy-MM-dd"); 

スニップ

+ "AND \"urn:schemas:httpmail:datereceived\" >= CAST(\"" + targetDate + "T00:00:00Z" + "\" AS 'dateTime.tz')" 

注意を3つの代わりに2つのゼロがあります。

関連する問題