首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指定日期时WebDAV Exchange2003失败

指定日期时WebDAV Exchange2003失败
EN

Stack Overflow用户
提问于 2012-04-10 20:29:10
回答 1查看 509关注 0票数 0

我正在使用以下代码从Exchange 2003服务器检索电子邮件。上周五一切正常,但现在它失败了。

根据一些调查,我已经将其范围缩小到targetDate变量。似乎如果日期在4月份,它会失败,并从服务器返回400。我已经注释掉了这一行,并尝试了不同的日期2012-3-29,2012-4-1,2012-4-10 (今天),4月份的日期似乎失败了。

某种病态的愚人节笑话?

代码本身派生自本文:http://www.codeproject.com/Articles/42458/Using-Exchange-2003-with-Webdav-Send-Retrieve-Atta

代码语言:javascript
复制
    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;
    }
EN

回答 1

Stack Overflow用户

发布于 2012-05-02 22:37:02

终于让它工作了。包括T00:00:..Z部分在内的要转换的确切targetDate必须与http://msdn.microsoft.com/en-us/library/aa123600%28v=exchg.65%29.aspx上的规范相匹配

我现在有:

代码语言:javascript
复制
DateTime targetDateTime = DateTime.Today;
string targetDate = targetDateTime.ToString("yyyy-MM-dd");

剪辑

代码语言:javascript
复制
+ "AND \"urn:schemas:httpmail:datereceived\" >= CAST(\"" + targetDate + "T00:00:00Z" + "\" AS 'dateTime.tz')"

请注意,秒部分是两个零而不是三个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10088821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档