none
Download Attachment From Exchange server using Webdav RRS feed

  • Question

  • Hi All,

    I'm getting below error while trying to download attachments from exchange server. Attached is my code.

    The remote server returned an error: (400) Bad Request.
    using System;
    
    
    
    using System.Collections.Generic;
    
    
    
    using System.Text;
    
    
    
    using System.Net;
    
    
    
    namespace ExchangeTest
    
    
    
    {
    
    
    
    public class WebDAV
    
    
    
    {
    
    
    
    public static class Authentications
    
    
    
    {
    
    
    
    public const string ANONYMOUS = "ANONYMOUS";
    
    
    
    public const string BASIC = "BASIC";
    
    
    
    public const string DIGEST = "DIGEST";
    
    
    
    public const string NTLM = "NTLM";
    
    
    
    public const string NEGOTIATE = "NEGOTIATE";
    
    
    
    public const string PASSPORT = "PASSPORT";
    
    
    
    }
    
    
    
    public static class Methods
    
    
    
    {
    
    
    
    public const string BCOPY = "BCOPY";
    
    
    
    public const string BDELETE = "BDELETE";
    
    
    
    public const string BMOVE = "BMOVE";
    
    
    
    public const string BPROPFIND = "BPROPFIND";
    
    
    
    public const string BPROPPATCH = "BPROPPATCH";
    
    
    
    public const string COPY = "COPY";
    
    
    
    public const string DELETE = "DELETE";
    
    
    
    public const string LOCK = "LOCK";
    
    
    
    public const string MKCOL = "MKCOL";
    
    
    
    public const string MOVE = "MOVE";
    
    
    
    public const string NOTIFY = "NOTIFY";
    
    
    
    public const string POLL = "POLL";
    
    
    
    public const string PROPFIND = "PROPFIND";
    
    
    
    public const string PROPPATCH = "PROPPATCH";
    
    
    
    public const string SEARCH = "SEARCH";
    
    
    
    public const string SUBSCRIBE = "SUBSCRIBE";
    
    
    
    public const string UNLOCK = "UNLOCK";
    
    
    
    public const string UNSUBSCRIBE = "UNSUBSCRIBE";
    
    
    
    public const string X_MS_ENUMATTS = "X-MS-ENUMATTS";
    
    
    
    }
    
    
    
    public const string CONTENT_TYPE_TEXT_XML = "text/xml";
    
    
    
    public const string NS_DAV = "DAV:";
    
    
    
    public const string PR_DAV_SEARCHREQUEST = "searchrequest";
    
    
    
    public const string PR_DAV_SQL = "sql";
    
    
    
    public const string PR_DAV_PROPFIND = "propfind";
    
    
    
    public const string PR_DAV_PROP = "prop";
    
    
    
    public const string PR_DAV_PROPERTYUPDATE = "propertyupdate";
    
    
    
    public const string PR_DAV_SET = "set";
    
    
    
    public const string PR_DAV_HREF = "href";
    
    
    
    public const string PR_DAV_PROPSTAT = "propstat";
    
    
    
    public const string PR_DAV_STATUS = "status";
    
    
    
    public const string PR_DAV_RESPONSE = "response";
    
    
    
    public const string NS_HTTPMAIL = "urn:schemas:httpmail:";
    
    
    
    public const string PR_HTTPMAIL_DATE = "date";
    
    
    
    public const string PR_HTTPMAIL_SUBJECT = "subject";
    
    
    
    public const string PR_HTTPMAIL_FROM = "from";
    
    
    
    public const string PR_HTTPMAIL_TO = "to";
    
    
    
    public const string PR_HTTPMAIL_READ = "read";
    
    
    
    public const string PR_HTTPMAIL_HASATTACHMENT = "hasattachment";
    
    
    
    public const string PR_HTTPMAIL_ATTACHMENTFILENAME = "attachmentfilename";
    
    
    
    public const string PR_HTTPMAIL_TEXTDESCRIPTION = "textdescription";
    
    
    
    public System.Net.ICredentials Credentials;
    
    
    
    public System.Xml.XmlDocument Search(System.Uri uri, string query)
    
    
    
    {
    
    
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    
    
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(ms, null);
    
    
    
    writer.WriteStartDocument();
    
    
    
    writer.WriteStartElement(PR_DAV_SEARCHREQUEST, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_SQL, NS_DAV);
    
    
    
    writer.WriteValue(query);
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndDocument();
    
    
    
    writer.Close();
    
    
    
    writer = null;
    
    
    
    byte[] data = ms.ToArray();
    
    
    
    ms.Close();
    
    
    
    ms = null;
    
    
    
    return GetXmlResponse(uri, Methods.SEARCH, data);
    
    
    
    }
    
    
    
    public System.Xml.XmlDocument PropFind(System.Uri uri, string localname, string ns)
    
    
    
    {
    
    
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    
    
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(ms, null);
    
    
    
    writer.WriteStartDocument();
    
    
    
    writer.WriteStartElement(PR_DAV_PROPFIND, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_PROP, NS_DAV);
    
    
    
    writer.WriteStartElement(localname, ns);
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndDocument();
    
    
    
    writer.Close();
    
    
    
    writer = null;
    
    
    
    byte[] data = ms.ToArray();
    
    
    
    ms.Close();
    
    
    
    ms = null;
    
    
    
    return GetXmlResponse(uri, Methods.SEARCH, data);
    
    
    
    }
    
    
    
    public void Delete(System.Uri uri)
    
    
    
    {
    
    
    
    GetEmptyResponse(uri, Methods.DELETE, null);
    
    
    
    }
    
    
    
    public System.Xml.XmlDocument PropPatch(System.Uri uri, string localname, string ns, object value)
    
    
    
    {
    
    
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    
    
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(ms, null);
    
    
    
    writer.WriteStartDocument();
    
    
    
    writer.WriteStartElement(PR_DAV_PROPERTYUPDATE, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_SET, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_PROP, NS_DAV);
    
    
    
    writer.WriteStartElement(localname, ns);
    
    
    
    writer.WriteValue(value);
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndDocument();
    
    
    
    writer.Close();
    
    
    
    writer = null;
    
    
    
    byte[] data = ms.ToArray();
    
    
    
    ms.Close();
    
    
    
    ms = null;
    
    
    
    return GetXmlResponse(uri, Methods.PROPPATCH, data);
    
    
    
    }
    
    
    
    public System.Xml.XmlDocument EnumAtts(System.Uri uri)
    
    
    
    {
    
    
    
    return GetXmlResponse(uri, Methods.X_MS_ENUMATTS, null);
    
    
    
    }
    
    
    
    private string GetHtmlResponse(System.Uri uri, string method, byte[] data)
    
    
    
    {
    
    
    
    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    
    
    
    request.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    request.Method = method;
    
    
    
    if (data != null)
    
    
    
    {
    
    
    
    string xml = System.Text.Encoding.UTF8.GetString(data);
    
    
    
    request.ContentType = CONTENT_TYPE_TEXT_XML;
    
    
    
    request.ContentLength = data.Length;
    
    
    
    System.IO.Stream requestStream = request.GetRequestStream();
    
    
    
    requestStream.Write(data, 0, data.Length);
    
    
    
    requestStream.Close();
    
    
    
    }
    
    
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
    
    
    System.IO.Stream responseStream = response.GetResponseStream();
    
    
    
    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
    
    
    
    int length = 8192;
    
    
    
    byte[] buffer = new byte[length];
    
    
    
    int count = responseStream.Read(buffer, 0, length);
    
    
    
    while (count > 0)
    
    
    
    {
    
    
    
    memoryStream.Write(buffer, 0, count);
    
    
    
    count = responseStream.Read(buffer, 0, length);
    
    
    
    }
    
    
    
    buffer = memoryStream.ToArray();
    
    
    
    memoryStream.Close();
    
    
    
    responseStream.Close();
    
    
    
    response.Close();
    
    
    
    return System.Text.Encoding.UTF8.GetString(buffer);
    
    
    
    }
    
    
    
    private void GetEmptyResponse(System.Uri uri, string method, byte[] data)
    
    
    
    {
    
    
    
    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    
    
    
    request.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    request.Method = method;
    
    
    
    if (data != null)
    
    
    
    {
    
    
    
    string xml = System.Text.Encoding.UTF8.GetString(data);
    
    
    
    request.ContentType = CONTENT_TYPE_TEXT_XML;
    
    
    
    request.ContentLength = data.Length;
    
    
    
    System.IO.Stream requestStream = request.GetRequestStream();
    
    
    
    requestStream.Write(data, 0, data.Length);
    
    
    
    requestStream.Close();
    
    
    
    }
    
    
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
    
    
    response.Close();
    
    
    
    }
    
    
    
    private System.Xml.XmlDocument GetXmlResponse(System.Uri uri, string method, byte[] data)
    
    
    
    {
    
    
    
    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    
    
    
    request.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    request.Method = method;
    
    
    
    if (data != null)
    
    
    
    {
    
    
    
    string xml = System.Text.Encoding.UTF8.GetString(data);
    
    
    
    request.ContentType = CONTENT_TYPE_TEXT_XML;
    
    
    
    request.ContentLength = data.Length;
    
    
    
    System.IO.Stream requestStream = request.GetRequestStream();
    
    
    
    requestStream.Write(data, 0, data.Length);
    
    
    
    requestStream.Close();
    
    
    
    }
    
    
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
    
    
    System.IO.Stream responseStream = response.GetResponseStream();
    
    
    
    System.Xml.XmlDocument document = new System.Xml.XmlDocument();
    
    
    
    document.Load(responseStream);
    
    
    
    responseStream.Close();
    
    
    
    response.Close();
    
    
    
    return document;
    
    
    
    }
    
    
    
    }
    
    
    
    public class ExchangeDownloader
    
    
    
    {
    
    
    
    public string Username;
    
    
    
    public string Domain;
    
    
    
    public string Password;
    
    
    
    public string MailboxUrl;
    
    
    
    public string DownloadPath;
    
    
    
    public void Download()
    
    
    
    {
    
    
    
    System.Uri mailboxUri = new System.Uri(MailboxUrl);
    
    
    
    System.Net.NetworkCredential credential = new System.Net.NetworkCredential(Username, Password);
    
    
    
    WebDAV webdav = new WebDAV();
    
    
    
    System.Net.CredentialCache credentials = new System.Net.CredentialCache();
    
    
    
    credentials.Add(mailboxUri, WebDAV.Authentications.NTLM, credential);
    
    
    
    webdav.Credentials = credentials;
    
    
    
    System.Uri[] messageUris = getMessagesWithAttachments(webdav, mailboxUri);
    
    
    
    foreach (System.Uri messageUri in messageUris)
    
    
    
    {
    
    
    
    System.Uri[] attachmentUris = getAttachments(webdav, messageUri);
    
    
    
    foreach (System.Uri attachmentUri in attachmentUris)
    
    
    
    {
    
    
    
    downloadAttachment(webdav, attachmentUri);
    
    
    
    }
    
    
    
    webdav.PropPatch(messageUri, WebDAV.PR_HTTPMAIL_READ, WebDAV.NS_HTTPMAIL, "1");
    
    
    
    }
    
    
    
    }
    
    
    
    private void downloadAttachment(WebDAV webdav, System.Uri uri)
    
    
    
    {
    
    
    
    System.Net.WebClient webClient = new System.Net.WebClient();
    
    
    
    webClient.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    string file = System.IO.Path.GetFileName(uri.AbsolutePath);
    
    
    
    string filename = System.IO.Path.Combine(DownloadPath, file);
    
    
    
    webClient.DownloadFile(uri, filename);
    
    
    
    }
    
    
    
    private System.Uri[] getAttachments(WebDAV webdav, System.Uri uri)
    
    
    
    {
    
    
    
    System.Collections.ArrayList attachmentList = new System.Collections.ArrayList();
    
    
    
    System.Xml.XmlDocument document = webdav.EnumAtts(uri);
    
    
    
    System.Xml.XmlNodeList responseElements = document.GetElementsByTagName(WebDAV.PR_DAV_RESPONSE, WebDAV.NS_DAV);
    
    
    
    foreach (System.Xml.XmlElement responseElement in responseElements)
    
    
    
    {
    
    
    
    System.Xml.XmlElement hrefElement = responseElement[WebDAV.PR_DAV_HREF, WebDAV.NS_DAV];
    
    
    
    System.Uri href = new System.Uri(hrefElement.InnerText);
    
    
    
    attachmentList.Add(href);
    
    
    
    }
    
    
    
    return (System.Uri[])attachmentList.ToArray(typeof(System.Uri));
    
    
    
    }
    
    
    
    private System.Uri[] getMessagesWithAttachments(WebDAV webdav, System.Uri uri)
    
    
    
    {
    
    
    
    System.Collections.ArrayList messageList = new System.Collections.ArrayList();
    
    
    
    string query = string.Format(
    
    
    
    "SELECT \"urn:schemas:httpmail:subject\" " +
    
    
    
    "FROM \"{0}\" " +
    
    
    
    "WHERE \"urn:schemas:httpmail:hasattachment\"=true " +
    
    
    
    "ORDER BY \"urn:schemas:httpmail:date DESC\""
    
    
    
    , uri);
    
    
    
    System.Xml.XmlDocument document = webdav.Search(uri, query);
    
    
    
    System.Xml.XmlNodeList responseElements = document.GetElementsByTagName(WebDAV.PR_DAV_RESPONSE, WebDAV.NS_DAV);
    
    
    
    foreach (System.Xml.XmlElement responseElement in responseElements)
    
    
    
    {
    
    
    
    System.Xml.XmlElement hrefElement = responseElement[WebDAV.PR_DAV_HREF, WebDAV.NS_DAV];
    
    
    
    System.Uri href = new System.Uri(hrefElement.InnerText);
    
    
    
    messageList.Add(href);
    
    
    
    }
    
    
    
    return (System.Uri[])messageList.ToArray(typeof(System.Uri));
    
    
    
    }
    
    
    
    }
    
    
    
    static class Program
    
    
    
    {
    
    
    
    static void Main()
    
    
    
    {
    
    
    
    ExchangeDownloader exchangeDownloader = new ExchangeDownloader();
    
    
    
    exchangeDownloader.Username = "username";
    
    
    
    exchangeDownloader.Domain = "";
    
    
    
    exchangeDownloader.Password = "password
    
    
    
    exchangeDownloader.MailboxUrl = "http://servername/exchange/alias/inbox";
    
    
    
    exchangeDownloader.DownloadPath = "C:\\Downloads";
    
    
    
    exchangeDownloader.Download();
    
    
    
    }
    
    
    
    }
    
    
    
    }
    
    
    
    

    Please help... Thanks...

    The remote server returned an error: (400) Bad Request.

     

    using System;
    
    
    
    using System.Collections.Generic;
    
    
    
    using System.Text;
    
    
    
    using System.Net;
    
    
    
    namespace ExchangeTest
    
    
    
    {
    
    
    
    public class WebDAV
    
    
    
    {
    
    
    
    public static class Authentications
    
    
    
    {
    
    
    
    public const string ANONYMOUS = "ANONYMOUS";
    
    
    
    public const string BASIC = "BASIC";
    
    
    
    public const string DIGEST = "DIGEST";
    
    
    
    public const string NTLM = "NTLM";
    
    
    
    public const string NEGOTIATE = "NEGOTIATE";
    
    
    
    public const string PASSPORT = "PASSPORT";
    
    
    
    }
    
    
    
    public static class Methods
    
    
    
    {
    
    
    
    public const string BCOPY = "BCOPY";
    
    
    
    public const string BDELETE = "BDELETE";
    
    
    
    public const string BMOVE = "BMOVE";
    
    
    
    public const string BPROPFIND = "BPROPFIND";
    
    
    
    public const string BPROPPATCH = "BPROPPATCH";
    
    
    
    public const string COPY = "COPY";
    
    
    
    public const string DELETE = "DELETE";
    
    
    
    public const string LOCK = "LOCK";
    
    
    
    public const string MKCOL = "MKCOL";
    
    
    
    public const string MOVE = "MOVE";
    
    
    
    public const string NOTIFY = "NOTIFY";
    
    
    
    public const string POLL = "POLL";
    
    
    
    public const string PROPFIND = "PROPFIND";
    
    
    
    public const string PROPPATCH = "PROPPATCH";
    
    
    
    public const string SEARCH = "SEARCH";
    
    
    
    public const string SUBSCRIBE = "SUBSCRIBE";
    
    
    
    public const string UNLOCK = "UNLOCK";
    
    
    
    public const string UNSUBSCRIBE = "UNSUBSCRIBE";
    
    
    
    public const string X_MS_ENUMATTS = "X-MS-ENUMATTS";
    
    
    
    }
    
    
    
    public const string CONTENT_TYPE_TEXT_XML = "text/xml";
    
    
    
    public const string NS_DAV = "DAV:";
    
    
    
    public const string PR_DAV_SEARCHREQUEST = "searchrequest";
    
    
    
    public const string PR_DAV_SQL = "sql";
    
    
    
    public const string PR_DAV_PROPFIND = "propfind";
    
    
    
    public const string PR_DAV_PROP = "prop";
    
    
    
    public const string PR_DAV_PROPERTYUPDATE = "propertyupdate";
    
    
    
    public const string PR_DAV_SET = "set";
    
    
    
    public const string PR_DAV_HREF = "href";
    
    
    
    public const string PR_DAV_PROPSTAT = "propstat";
    
    
    
    public const string PR_DAV_STATUS = "status";
    
    
    
    public const string PR_DAV_RESPONSE = "response";
    
    
    
    public const string NS_HTTPMAIL = "urn:schemas:httpmail:";
    
    
    
    public const string PR_HTTPMAIL_DATE = "date";
    
    
    
    public const string PR_HTTPMAIL_SUBJECT = "subject";
    
    
    
    public const string PR_HTTPMAIL_FROM = "from";
    
    
    
    public const string PR_HTTPMAIL_TO = "to";
    
    
    
    public const string PR_HTTPMAIL_READ = "read";
    
    
    
    public const string PR_HTTPMAIL_HASATTACHMENT = "hasattachment";
    
    
    
    public const string PR_HTTPMAIL_ATTACHMENTFILENAME = "attachmentfilename";
    
    
    
    public const string PR_HTTPMAIL_TEXTDESCRIPTION = "textdescription";
    
    
    
    public System.Net.ICredentials Credentials;
    
    
    
    public System.Xml.XmlDocument Search(System.Uri uri, string query)
    
    
    
    {
    
    
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    
    
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(ms, null);
    
    
    
    writer.WriteStartDocument();
    
    
    
    writer.WriteStartElement(PR_DAV_SEARCHREQUEST, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_SQL, NS_DAV);
    
    
    
    writer.WriteValue(query);
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndDocument();
    
    
    
    writer.Close();
    
    
    
    writer = null;
    
    
    
    byte[] data = ms.ToArray();
    
    
    
    ms.Close();
    
    
    
    ms = null;
    
    
    
    return GetXmlResponse(uri, Methods.SEARCH, data);
    
    
    
    }
    
    
    
    public System.Xml.XmlDocument PropFind(System.Uri uri, string localname, string ns)
    
    
    
    {
    
    
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    
    
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(ms, null);
    
    
    
    writer.WriteStartDocument();
    
    
    
    writer.WriteStartElement(PR_DAV_PROPFIND, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_PROP, NS_DAV);
    
    
    
    writer.WriteStartElement(localname, ns);
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndDocument();
    
    
    
    writer.Close();
    
    
    
    writer = null;
    
    
    
    byte[] data = ms.ToArray();
    
    
    
    ms.Close();
    
    
    
    ms = null;
    
    
    
    return GetXmlResponse(uri, Methods.SEARCH, data);
    
    
    
    }
    
    
    
    public void Delete(System.Uri uri)
    
    
    
    {
    
    
    
    GetEmptyResponse(uri, Methods.DELETE, null);
    
    
    
    }
    
    
    
    public System.Xml.XmlDocument PropPatch(System.Uri uri, string localname, string ns, object value)
    
    
    
    {
    
    
    
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
    
    
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(ms, null);
    
    
    
    writer.WriteStartDocument();
    
    
    
    writer.WriteStartElement(PR_DAV_PROPERTYUPDATE, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_SET, NS_DAV);
    
    
    
    writer.WriteStartElement(PR_DAV_PROP, NS_DAV);
    
    
    
    writer.WriteStartElement(localname, ns);
    
    
    
    writer.WriteValue(value);
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndElement();
    
    
    
    writer.WriteEndDocument();
    
    
    
    writer.Close();
    
    
    
    writer = null;
    
    
    
    byte[] data = ms.ToArray();
    
    
    
    ms.Close();
    
    
    
    ms = null;
    
    
    
    return GetXmlResponse(uri, Methods.PROPPATCH, data);
    
    
    
    }
    
    
    
    public System.Xml.XmlDocument EnumAtts(System.Uri uri)
    
    
    
    {
    
    
    
    return GetXmlResponse(uri, Methods.X_MS_ENUMATTS, null);
    
    
    
    }
    
    
    
    private string GetHtmlResponse(System.Uri uri, string method, byte[] data)
    
    
    
    {
    
    
    
    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    
    
    
    request.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    request.Method = method;
    
    
    
    if (data != null)
    
    
    
    {
    
    
    
    string xml = System.Text.Encoding.UTF8.GetString(data);
    
    
    
    request.ContentType = CONTENT_TYPE_TEXT_XML;
    
    
    
    request.ContentLength = data.Length;
    
    
    
    System.IO.Stream requestStream = request.GetRequestStream();
    
    
    
    requestStream.Write(data, 0, data.Length);
    
    
    
    requestStream.Close();
    
    
    
    }
    
    
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
    
    
    System.IO.Stream responseStream = response.GetResponseStream();
    
    
    
    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
    
    
    
    int length = 8192;
    
    
    
    byte[] buffer = new byte[length];
    
    
    
    int count = responseStream.Read(buffer, 0, length);
    
    
    
    while (count > 0)
    
    
    
    {
    
    
    
    memoryStream.Write(buffer, 0, count);
    
    
    
    count = responseStream.Read(buffer, 0, length);
    
    
    
    }
    
    
    
    buffer = memoryStream.ToArray();
    
    
    
    memoryStream.Close();
    
    
    
    responseStream.Close();
    
    
    
    response.Close();
    
    
    
    return System.Text.Encoding.UTF8.GetString(buffer);
    
    
    
    }
    
    
    
    private void GetEmptyResponse(System.Uri uri, string method, byte[] data)
    
    
    
    {
    
    
    
    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    
    
    
    request.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    request.Method = method;
    
    
    
    if (data != null)
    
    
    
    {
    
    
    
    string xml = System.Text.Encoding.UTF8.GetString(data);
    
    
    
    request.ContentType = CONTENT_TYPE_TEXT_XML;
    
    
    
    request.ContentLength = data.Length;
    
    
    
    System.IO.Stream requestStream = request.GetRequestStream();
    
    
    
    requestStream.Write(data, 0, data.Length);
    
    
    
    requestStream.Close();
    
    
    
    }
    
    
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
    
    
    response.Close();
    
    
    
    }
    
    
    
    private System.Xml.XmlDocument GetXmlResponse(System.Uri uri, string method, byte[] data)
    
    
    
    {
    
    
    
    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
    
    
    
    request.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    request.Method = method;
    
    
    
    if (data != null)
    
    
    
    {
    
    
    
    string xml = System.Text.Encoding.UTF8.GetString(data);
    
    
    
    request.ContentType = CONTENT_TYPE_TEXT_XML;
    
    
    
    request.ContentLength = data.Length;
    
    
    
    System.IO.Stream requestStream = request.GetRequestStream();
    
    
    
    requestStream.Write(data, 0, data.Length);
    
    
    
    requestStream.Close();
    
    
    
    }
    
    
    
    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
    
    
    
    System.IO.Stream responseStream = response.GetResponseStream();
    
    
    
    System.Xml.XmlDocument document = new System.Xml.XmlDocument();
    
    
    
    document.Load(responseStream);
    
    
    
    responseStream.Close();
    
    
    
    response.Close();
    
    
    
    return document;
    
    
    
    }
    
    
    
    }
    
    
    
    public class ExchangeDownloader
    
    
    
    {
    
    
    
    public string Username;
    
    
    
    public string Domain;
    
    
    
    public string Password;
    
    
    
    public string MailboxUrl;
    
    
    
    public string DownloadPath;
    
    
    
    public void Download()
    
    
    
    {
    
    
    
    System.Uri mailboxUri = new System.Uri(MailboxUrl);
    
    
    
    System.Net.NetworkCredential credential = new System.Net.NetworkCredential(Username, Password);
    
    
    
    WebDAV webdav = new WebDAV();
    
    
    
    System.Net.CredentialCache credentials = new System.Net.CredentialCache();
    
    
    
    credentials.Add(mailboxUri, WebDAV.Authentications.NTLM, credential);
    
    
    
    webdav.Credentials = credentials;
    
    
    
    System.Uri[] messageUris = getMessagesWithAttachments(webdav, mailboxUri);
    
    
    
    foreach (System.Uri messageUri in messageUris)
    
    
    
    {
    
    
    
    System.Uri[] attachmentUris = getAttachments(webdav, messageUri);
    
    
    
    foreach (System.Uri attachmentUri in attachmentUris)
    
    
    
    {
    
    
    
    downloadAttachment(webdav, attachmentUri);
    
    
    
    }
    
    
    
    webdav.PropPatch(messageUri, WebDAV.PR_HTTPMAIL_READ, WebDAV.NS_HTTPMAIL, "1");
    
    
    
    }
    
    
    
    }
    
    
    
    private void downloadAttachment(WebDAV webdav, System.Uri uri)
    
    
    
    {
    
    
    
    System.Net.WebClient webClient = new System.Net.WebClient();
    
    
    
    webClient.Credentials = new NetworkCredential("s2\\liezl.marcos", "Unilever.123@");
    
    
    
    string file = System.IO.Path.GetFileName(uri.AbsolutePath);
    
    
    
    string filename = System.IO.Path.Combine(DownloadPath, file);
    
    
    
    webClient.DownloadFile(uri, filename);
    
    
    
    }
    
    
    
    private System.Uri[] getAttachments(WebDAV webdav, System.Uri uri)
    
    
    
    {
    
    
    
    System.Collections.ArrayList attachmentList = new System.Collections.ArrayList();
    
    
    
    System.Xml.XmlDocument document = webdav.EnumAtts(uri);
    
    
    
    System.Xml.XmlNodeList responseElements = document.GetElementsByTagName(WebDAV.PR_DAV_RESPONSE, WebDAV.NS_DAV);
    
    
    
    foreach (System.Xml.XmlElement responseElement in responseElements)
    
    
    
    {
    
    
    
    System.Xml.XmlElement hrefElement = responseElement[WebDAV.PR_DAV_HREF, WebDAV.NS_DAV];
    
    
    
    System.Uri href = new System.Uri(hrefElement.InnerText);
    
    
    
    attachmentList.Add(href);
    
    
    
    }
    
    
    
    return (System.Uri[])attachmentList.ToArray(typeof(System.Uri));
    
    
    
    }
    
    
    
    private System.Uri[] getMessagesWithAttachments(WebDAV webdav, System.Uri uri)
    
    
    
    {
    
    
    
    System.Collections.ArrayList messageList = new System.Collections.ArrayList();
    
    
    
    string query = string.Format(
    
    
    
    "SELECT \"urn:schemas:httpmail:subject\" " +
    
    
    
    "FROM \"{0}\" " +
    
    
    
    "WHERE \"urn:schemas:httpmail:hasattachment\"=true " +
    
    
    
    "ORDER BY \"urn:schemas:httpmail:date DESC\""
    
    
    
    , uri);
    
    
    
    System.Xml.XmlDocument document = webdav.Search(uri, query);
    
    
    
    System.Xml.XmlNodeList responseElements = document.GetElementsByTagName(WebDAV.PR_DAV_RESPONSE, WebDAV.NS_DAV);
    
    
    
    foreach (System.Xml.XmlElement responseElement in responseElements)
    
    
    
    {
    
    
    
    System.Xml.XmlElement hrefElement = responseElement[WebDAV.PR_DAV_HREF, WebDAV.NS_DAV];
    
    
    
    System.Uri href = new System.Uri(hrefElement.InnerText);
    
    
    
    messageList.Add(href);
    
    
    
    }
    
    
    
    return (System.Uri[])messageList.ToArray(typeof(System.Uri));
    
    
    
    }
    
    
    
    }
    
    
    
    static class Program
    
    
    
    {
    
    
    
    static void Main()
    
    
    
    {
    
    
    
    ExchangeDownloader exchangeDownloader = new ExchangeDownloader();
    
    
    
    exchangeDownloader.Username = "username";
    
    
    
    exchangeDownloader.Domain = "";
    
    
    
    exchangeDownloader.Password = "password
    
    
    
    exchangeDownloader.MailboxUrl = "http://servername/exchange/alias/inbox";
    
    
    
    exchangeDownloader.DownloadPath = "C:\\Downloads";
    
    
    
    exchangeDownloader.Download();
    
    
    
    }
    
    
    
    }
    
    
    
    }
    
    
    
    
    
    
    Monday, October 19, 2009 7:07 AM

Answers

  • Hi liezl123:

    Thank you for contacting us and your interest in Exchange development.  This forum is for discussion around the technical content of the Exchange Server Protocols documentation.  
     

    There is a very helpful community of Exchange developers on the Exchange Development forum that may be able to assist you with your solution. I suggest you post your question to the TechNet Forum » Exchange Server » Development.

    When posting to above mentioned forum please provide background information about your environment and proposed solution such as:

    • Exchange Server version.
    • Description of your Exchange and IIS topology.

    Providing this background information will better enable other developers to help you with your solution. Also feel free to answer other posts on the forum.



    Regards,
    Obaid Farooqi


    Regards, Obaid Farooqi
    Monday, October 19, 2009 3:29 PM
    Owner