For everyone who is interested, I learned how to refer to the body of the letter.
First, the request was changed to the following:
strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"
+ "<D:sql>SELECT \"DAV:displayname\", \"http://schemas.microsoft.com/mapi/proptag/x1000001e\" FROM \"" + strRootURI + "\""
+ "WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false"
+ "</D:sql></D:searchrequest>";
Then, a little extra code was used to refer to the body from the answer:
XmlNodeList BodyNodes = null;
BodyNodes = ResponseXmlDoc.GetElementsByTagName("d:x1000001e");
Here is the full code:
System.Net.HttpWebRequest Request;
System.Net.WebResponse Response;
System.Net.CredentialCache MyCredentialCache;
string strRootURI = "http://servername/Exchange/email@test.com/Inbox/";
string strUserName = "userName";
string strPassword = "password";
string strDomain = "domain";
string strQuery = "";
byte[] bytes = null;
System.IO.Stream RequestStream = null;
System.IO.Stream ResponseStream = null;
XmlDocument ResponseXmlDoc = null;
XmlNodeList DisplayNameNodes = null;
XmlNodeList BodyNodes = null;
try
{
strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"
+ "<D:sql>SELECT \"DAV:displayname\", \"http://schemas.microsoft.com/mapi/proptag/x1000001e\" FROM \"" + strRootURI + "\""
+ "WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false"
+ "</D:sql></D:searchrequest>";
MyCredentialCache = new System.Net.CredentialCache();
MyCredentialCache.Add(new System.Uri(strRootURI),
"NTLM",
new System.Net.NetworkCredential(strUserName, strPassword, strDomain)
);
Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);
Request.Credentials = MyCredentialCache;
Request.Method = "SEARCH";
bytes = Encoding.UTF8.GetBytes((string)strQuery);
Request.ContentLength = bytes.Length;
RequestStream = Request.GetRequestStream();
RequestStream.Write(bytes, 0, bytes.Length);
RequestStream.Close();
Request.ContentType = "text/xml";
Response = (HttpWebResponse)Request.GetResponse();
ResponseStream = Response.GetResponseStream();
ResponseXmlDoc = new XmlDocument();
ResponseXmlDoc.Load(ResponseStream);
DisplayNameNodes = ResponseXmlDoc.GetElementsByTagName("a:displayname");
BodyNodes = ResponseXmlDoc.GetElementsByTagName("d:x1000001e");
DataTable emails = new DataTable();
emails.Columns.Add("Subject");
emails.Columns.Add("Body");
if (DisplayNameNodes.Count > 0)
{
Console.WriteLine("Non-folder item display names...");
for (int i = 0; i < DisplayNameNodes.Count; i++)
{
DataRow row = emails.NewRow();
row[0] = DisplayNameNodes[i].InnerText.ToString().Trim();
row[1] = BodyNodes[i].InnerText.ToString().Trim();
emails.Rows.Add(row);
}
}
else
{
Console.WriteLine("No non-folder items found...");
}
foreach (DataRow row in emails.Rows)
{
Console.WriteLine("Subject: {0}", row["Subject"]);
Console.WriteLine("Body: {0}", row["Body"]);
Console.WriteLine("-------------------------------------------------------------------");
}
ResponseStream.Close();
Response.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Hope this helps someone!
source
share