Exchange WebDAV保存到草稿不可编辑

时间:2010-08-31 22:29:57

标签: c# webdav exchange-server-2003

我有以下代码将邮件保存到Exchange WEBDAV草稿文件夹。 IT保存邮件,但如果在Outlook中打开它,则“发送”按钮处于“已禁用”状态,并且邮件是只读的。请帮我找一下这段代码中缺少的东西......

感谢 Bhuvan

 strBody = "To: " + strTo + "\n" +
                "Subject: " + (string.IsNullOrEmpty(message.Subject) ? "" : message.Subject) + "\n" +
            "Date: " + System.DateTime.Now + "\n" +
            "X-Mailer: test mailer" + "\n" +
            "MIME-Version: 1.0" + "\n" +
            "Content-Type: text/html;" + "\n" +
            "Charset = \"iso-8859-1\"" + "\n" +
            "Content-Transfer-Encoding: 8bit" + "\n" +
            "\n" + (string.IsNullOrEmpty(message.HtmlBody) ? "" : message.HtmlBody.Replace("<head />","").Replace("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">",""));

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

            // Add the network credentials to the request.
            // Use default credentials of the service to access the server.
            PUTRequest.Credentials = cred;


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

            // Encode the body using UTF-8.
            byte[] bytes = Encoding.UTF8.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();

            if (message.Attachments != null)
            {
                //Do the PROPPATCH
                System.Net.HttpWebRequest PROPPATCHRequest;
                System.Net.WebResponse PROPPATCHResponse;
                System.IO.Stream PROPPATCHRequestStream = null;

                string strxml = "<?xml version='1.0'?>" +
                "<d:propertyupdate xmlns:d='DAV:'>" +
                "<d:set>" +
                "<d:prop>" +
                "<isCollection xmlns='DAV:'>False</isCollection>" +
                "</d:prop>" +
                "</d:set>"
                + "<g:remove>"
                + "<g:prop><m:date/></g:prop>"
                + "</g:remove>" 
                + "</d:propertyupdate>";

                PROPPATCHRequest = (System.Net.HttpWebRequest)HttpWebRequest.Create(tgtUri);
                PROPPATCHRequest.Credentials = cred;
                PROPPATCHRequest.Headers.Set("Translate", "f");
                PROPPATCHRequest.ContentType = "text/xml";
                PROPPATCHRequest.ContentLength = strxml.Length;
                PROPPATCHRequest.Method = "PROPPATCH";
                byte[] PROPPATCHbytes = Encoding.UTF8.GetBytes(strxml);
                PROPPATCHRequest.ContentLength = PROPPATCHbytes.Length;
                PROPPATCHRequestStream = PROPPATCHRequest.GetRequestStream();
                PROPPATCHRequestStream.Write(PROPPATCHbytes, 0, PROPPATCHbytes.Length);
                PROPPATCHRequestStream.Close();
                PROPPATCHResponse = (System.Net.HttpWebResponse)PROPPATCHRequest.GetResponse();


                foreach (KeyValuePair<string, byte[]> attachment in message.Attachments)
                {
                    System.IO.Stream PUTAttachRequestStream = null;
                    System.Net.HttpWebRequest PUTAttachRequest;
                    System.Net.WebResponse PUTAttachResponse;
                    //Attach File: This could be put in a loop to attach more than one file.
                    string FileName = attachment.Key; //@"2842498_794802035296_Label1.pdf";
                    string attachURI = tgtUri + "/" + FileName;
                    PUTAttachRequest = (System.Net.HttpWebRequest)HttpWebRequest.Create(attachURI);
                    PUTAttachRequest.Credentials = cred;
                    PUTAttachRequest.Method = "PUT";

                    PUTAttachRequest.ContentLength = attachment.Value.Length; //binaryData.Length;
                    PUTAttachRequestStream = PUTAttachRequest.GetRequestStream();
                    PUTAttachRequestStream.Write(attachment.Value, 0, attachment.Value.Length); //(binaryData, 0, binaryData.Length);
                    PUTAttachRequestStream.Close();

                    PUTAttachResponse = (System.Net.HttpWebResponse)PUTAttachRequest.GetResponse();
                    PUTAttachResponse.Close();
                }

                PROPPATCHResponse.Close();
            }

            // Clean up.
            PUTResponse.Close();

1 个答案:

答案 0 :(得分:0)

我在msdn上的Akash's blog找到了答案。人们必须仔细阅读以获得实际答案,但解决方案有效。