2010-08-31 19 views
0

我有以下代碼來保存消息到Exchange WEBDAV草稿文件夾。 IT會保存該消息,但如果在Outlook中打開它,發送按鈕將被禁用,並且該消息爲只讀。請幫我看看我是什麼在此代碼缺少...交換WebDAV保存到草稿不可編輯

感謝 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(); 

回答

0

我找到了答案在Akash's blog MSDN上。人們必須仔細閱讀以獲得實際答案,但解決方案起作用。