public static void SendMail() { HttpWebRequest PUTRequest; WebResponse PUTResponse; HttpWebRequest MOVERequest; WebResponse MOVEResponse; CredentialCache MyCredentialCache; string strMailboxURI = ""; string strSubURI = ""; string strTempURI = ""; string strServer = "client"; string strPassword = "!QAZ1qaz"; string strDomain = "grouppower.local"; string strAlias = "Test"; string strTo = "[email protected]"; string strSubject = "你好,邮件测试"; string strText = "邮件测试内容"; string strBody = ""; byte[] bytes = null; 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 = \"GB2312\"" + "\n" + "Content-Transfer-Encoding: 7bit" + "\n" + "\n" + strText; // 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.GetEncoding("GB2312").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.ReadKey(); }
http://www.cnblogs.com/wudingfeng/archive/2008/09/25/1298522.html
{
HttpWebRequest PUTRequest;
WebResponse PUTResponse;
HttpWebRequest MOVERequest;
WebResponse MOVEResponse;
CredentialCache MyCredentialCache;
string strMailboxURI = "";
string strSubURI = "";
string strTempURI = "";
string strServer = "client";
string strPassword = "!QAZ1qaz";
string strDomain = "grouppower.local";
string strAlias = "Test";
string strTo = "[email protected]";
string strSubject = "你好,邮件测试";
string strText = "邮件测试内容";
string strBody = "";
byte[] bytes = null;
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 = \"GB2312\"" + "\n" +
"Content-Transfer-Encoding: 7bit" + "\n" +
"\n" + strText;
// 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.GetEncoding("GB2312").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.ReadKey();
}