流星小筑
火流星一闪即逝,只留给人们许下心愿的瞬间

导航

 

WEBDAV下发送邮件:

using System;
using System.Net;
using System.IO;
using System.Text;

namespace ExchangeSDK.Snippets.CSharp
{
    
class SendingMessageWebDAV
    
{
        [STAThread]
        
static void Main(string[] args)
        
{
            System.Net.HttpWebRequest PUTRequest;
            System.Net.WebResponse PUTResponse;
            System.Net.HttpWebRequest MOVERequest;
            System.Net.WebResponse MOVEResponse;
            System.Net.CredentialCache MyCredentialCache;
            
string strMailboxURI = "";
            
string strSubURI = "";
            
string strTempURI = "";
            
string strServer = "191.0.0.111";
            
string strPassword = "afineday";
            
string strDomain = "oa.lgyw";
            
string strAlias = "administrator";
            
string strTo = "wangxling@netease.com";
            
string strSubject = "明天工作内容";
            
string strText = "我应该怎么做?.";
            
string strBody = "";
            
byte[] bytes = null;
            System.IO.Stream PUTRequestStream 
= null;

            
try
            
{
                
// Build the mailbox URI.
                strMailboxURI = "http://" + strServer + "/exchange/" + strAlias;

                
// Build the submission URI for the message.  If Secure
                
// Sockets Layer (SSL) is set up on the server, use
                
// "https://" instead of "http://".
                strSubURI = "http://" + strServer + "/exchange/" + strAlias
                    
+ "/##DavMailSubmissionURI##/";

                
// Build the temporary URI for the message. If SSL is set
                
// up on the server, use "https://" instead of "http://".
                strTempURI = "http://" + strServer + "/exchange/" + strAlias
                    
+ "/草稿/" + strSubject + ".eml";

                
// Construct the RFC 822 formatted body of the PUT request.
                
// Note: If the From: header is included here,
                
// the MOVE method request will return a
                
// 403 (Forbidden) status. The From address will
                
// be generated by the Exchange server.
                strBody = "To: " + strTo + "\n" +
                    
"Subject: " + strSubject + "\n" +
                    
"Date: " + System.DateTime.Now +
                    
"X-Mailer: test mailer" + "\n" +
                    
"MIME-Version: 1.0" + "\n" +
                    
"Content-Type: text/plain;" + "\n" +
                    
"Charset = \"iso-8859-1\"" + "\n" +
                    
"Content-Transfer-Encoding:7bit" + "\n" +
                    
"\n" + strText;
                
//iso-8859-1
                
//quotedprintable7bit
                
// 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(strMailboxURI),
                    
"NTLM",
                    
new System.Net.NetworkCredential(strAlias, strPassword, strDomain)
                    );

                
// Create the HttpWebRequest object.
                PUTRequest = (System.Net.HttpWebRequest)HttpWebRequest.Create(strTempURI);

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

                
// Specify the PUT method.
                PUTRequest.Method = "PUT";

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

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

                
// Get a reference to the request stream.
                PUTRequestStream = PUTRequest.GetRequestStream();

                
// Write the message body to the request stream.
                PUTRequestStream.Write(bytes, 0, bytes.Length);

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

                
// Set the Content-Type header to the RFC 822 message format.
                PUTRequest.ContentType = "message/rfc822";

                
// PUT the message in the Drafts folder of the
                
// sender's mailbox.
                PUTResponse = (System.Net.HttpWebResponse)PUTRequest.GetResponse();

                
// Create the HttpWebRequest object.
                MOVERequest = (System.Net.HttpWebRequest)HttpWebRequest.Create(strTempURI);

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

                
// Specify the MOVE method.
                MOVERequest.Method = "MOVE";

                
// Set the Destination header to the
                
// mail submission URI.
                MOVERequest.Headers.Add("Destination", strSubURI);

                
// Send the message by moving it from the Drafts folder of the
                
// sender's mailbox to the mail submission URI.
                MOVEResponse = (System.Net.HttpWebResponse)MOVERequest.GetResponse();

                Console.WriteLine(
"Message successfully sent.");

                
// Clean up.
                PUTResponse.Close();
                MOVEResponse.Close();

            }

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

        }

    }

}
以上COPY自Exchange SDK,不过bytes = Encoding.Default.GetBytes((string)strBody);SDK中用的是UTF-8编码,会导致中文乱码。

获取新邮件数目:
private void GetUnReadMailCount()
        
{
            System.Net.HttpWebRequest Request;
            System.Net.WebResponse Response;
            System.Net.CredentialCache MyCredentialCache;
            
string strRootURI = "http://191.0.0.111/exchange/administrator";
            
string strUserName = "administrator";
            
string strPassword = "afineday";
            
string strDomain = "oa.lgyw";
            
string strQuery ="";
            
byte[] bytes = null;
            System.IO.Stream RequestStream 
= null;
            System.IO.Stream ResponseStream 
= null;
            XmlDocument ResponseXmlDoc 
= null;
            XmlNodeList HrefNodes
= null;
            XmlNodeList SizeNodes
= null;

            
try
            
{
                
// Build the SQL query.
                strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >"
                    
+ "<D:sql>SELECT \"DAV:displayname\",\"urn:schemas:httpmail:unreadcount\" FROM \"" + strRootURI + "\""
                    
//    +"where \"DAV:contentclass\"=\"urn:schemas:httpmail:read \""            
                    
//        + "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);
                HrefNodes 
= ResponseXmlDoc.GetElementsByTagName("a:displayname");
                SizeNodes 
= ResponseXmlDoc.GetElementsByTagName("d:unreadcount");
                
for(int i=0;i<HrefNodes.Count;i++)
                
{
                    
if(HrefNodes[i].InnerText=="收件箱")
                        
this.LMail.Text="您有"+SizeNodes[i].InnerText+"封新邮件!";
                }

                ResponseStream.Close();
                Response.Close();
            }

            
catch(Exception)
            
{
                
// Catch any exceptions. Any error codes from the SEARCH
                
// method request on the server will be caught here, also.
                this.LMail.Text="没有找到您的邮箱";
            }


            
        }
posted on 2005-08-22 09:51  风渐寒pro  阅读(1416)  评论(3编辑  收藏  举报