阅读主体和使用WebDAV和C#电子邮件的身体 [英] Read subject and body of email using WebDAV and C#

查看:189
本文介绍了阅读主体和使用WebDAV和C#电子邮件的身体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用这个的例子,从微软阅读使用WebDAV的电子邮件的主题。我也想读的身体,但我不确定如何处理这个。我相信,这个代码是需要修改的内容:?< XML版本= \

I am using this example from Microsoft to read the subject of an email using WebDAV. I would also like to read the body, but am unsure how to approach this. I believe this code is what needs to be modified:

strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"
        + "<D:sql>SELECT \"DAV:displayname\" FROM \"" + strRootURI + "\""
        + "WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false"
        + "</D:sql></D:searchrequest>";



正如你所看到的,此代码仅返回对象的显示名。怎么可以这样修改,返回身呢?

As you can see, this code only returns the displayname of the object. How can this be modified to return the body as well?

推荐答案

有关有兴趣的人,我发现了如何引用的身体电子邮件。

For anyone interested, I found out how to reference the body of the email.

首先查询被修改为以下内容:

First the query was modified 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 bit of extra code was used to reference the body from the response:

XmlNodeList BodyNodes = null;
BodyNodes = ResponseXmlDoc.GetElementsByTagName("d:x1000001e");

下面是完整的代码:

// Variables.
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
{
    //Build the SQL query.
    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>";

// Create a new CredentialCache object and fill it with the network
// credentials required to access the server.
MyCredentialCache = new System.Net.CredentialCache();
MyCredentialCache.Add(new System.Uri(strRootURI),
   "NTLM",
   new System.Net.NetworkCredential(strUserName, strPassword, strDomain)
   );

// Create the HttpWebRequest object.
Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);

// Add the network credentials to the request.
Request.Credentials = MyCredentialCache;

// Specify the method.
Request.Method = "SEARCH";

// Encode the body using UTF-8.
bytes = Encoding.UTF8.GetBytes((string)strQuery);

// Set the content header length.  This must be
// done before writing data to the request stream.
Request.ContentLength = bytes.Length;

// Get a reference to the request stream.
RequestStream = Request.GetRequestStream();

// Write the SQL query to the request stream.
RequestStream.Write(bytes, 0, bytes.Length);

// Close the Stream object to release the connection
// for further use.
RequestStream.Close();

// Set the content type header.
Request.ContentType = "text/xml";

// Send the SEARCH method request and get the
// response from the server.
Response = (HttpWebResponse)Request.GetResponse();

// Get the XML response stream.
ResponseStream = Response.GetResponseStream();

// Create the XmlDocument object from the XML response stream.
ResponseXmlDoc = new XmlDocument();
ResponseXmlDoc.Load(ResponseStream);

// Build a list of the DAV:href XML nodes, corresponding to the folders
// in the mailbox.  The DAV: namespace is typically assgigned the a:
// prefix in the XML response body.
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...");

    // Loop through the display name nodes.
    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("-------------------------------------------------------------------");
}

// Clean up.
ResponseStream.Close();
Response.Close();

}
catch (Exception ex)
{
    // Catch any exceptions. Any error codes from the SEARCH
    // method request on the server will be caught here, also.
    Console.WriteLine(ex.Message);
}



我希望这可以帮助别人!

I hope this helps someone!

这篇关于阅读主体和使用WebDAV和C#电子邮件的身体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆