我有以下代码将邮件保存到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();