How to send an e-mail message by using WebDAV in Visual C# (313128)



The information in this article applies to:

  • Microsoft Visual C# 2005, Express Edition
  • Microsoft Visual C# .NET (2003)
  • Microsoft Visual C# .NET (2002)
  • Microsoft Exchange 2000 Server

This article was previously published under Q313128

SUMMARY

This article describes how to send an e-mail message by using Web Distributed Authoring and Versioning (WebDAV) in Microsoft Visual C# . This article also includes sample code that you can use to send the e-mail message. In the sample code, the HttpWebRequest class sends a request to a computer that is running Microsoft Exchange 2000 Server, and the HttpWebResponse class receives the response.

Note The HttpWebRequest class and the HttpWebResponse class are in the "System.Net" namespace.

MORE INFORMATION

To send an e-mail message by using WebDAV in Visual C#, follow these steps:
  1. Start Microsoft Visual Studio .NET or Microsoft Visual Studio 2005.
  2. On the File menu, point to New, and then click Project.
  3. In the Visual C# Projects types list, click Console Application.

    Note In Visual Studio 2005, click Console Application in the Visual C# list.

    In Visual Studio .NET, Class1.cs is created by default. In Visual Studio 2005, Program.cs is created by default.
  4. In the code window, replace the code with the following:
    using System;
    using System.Net;
    using System.IO;   
    
    namespace WebDavNET
    {
     /// <summary>
     /// Summary description for Class1.
     /// </summary>
     class Class1
     {
      static void Main(string[] args)
      {
       try 
       {
        // TODO: Replace with the name of the computer that is running Exchange 2000.
        string  strServer = "ExchServe";
        // TODO: Replace with the sender's alias.
        string  strSenderAlias = "sender";  
        // TODO: Replace with the sender's e-mail address.
        string  strFrom = "sender@example.com"; 
        // TODO: Replace with the recipient's e-mail address.
        string  strTo = "recipient@example.com"; 
     
        string  strSubject = "Send Using HttpWebRequest";
        string  strBody = "Hello World";
    
        string sUri;
        sUri = "http://" + strServer + "/Exchange/" + strSenderAlias;
        sUri = sUri + "/%23%23DavMailSubmissionURI%23%23/"; 
    
        System.Uri myUri = new System.Uri(sUri);
        HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(myUri);
    
        string sQuery;
        DateTime mySentTime = new DateTime();
        sQuery = "From: " + strFrom + "\n" + 
         "To: " + strTo + "\n" + 
         "Subject: " + strSubject + "\n" + 
         "Date: " + DateTime.Now.ToString() + "\n" +
         "X-Mailer: My DAV mailer" + "\n" + 
         "MIME-Version: 1.0" + "\n" + 
         "Content-Type: text/plain;" + "\n" + 
         "Charset = \"iso-8859-1\"" + "\n" + 
         "Content-Transfer-Encoding: 7bit" + "\n" + "\n" + 
         strBody;
    
        // Set the credentials.
        // TODO: Replace with the appropriate user credential.
        NetworkCredential myCred = new NetworkCredential(@"DomainName\User", "Password");
        CredentialCache myCredentialCache = new CredentialCache();
        myCredentialCache.Add(myUri, "Basic", myCred);
        HttpWRequest.Credentials = myCredentialCache;
    
        // Set the headers.
        HttpWRequest.Headers.Set("Translate", "f");
        HttpWRequest.ContentType =  "message/rfc822";
        HttpWRequest.ContentLength = sQuery.Length;
    
        //Set the request timeout to 5 minutes.
        HttpWRequest.Timeout = 300000;
        // Set the request method.
        HttpWRequest.Method = "PUT";
    
        // Store the data in a byte array.
        byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes(sQuery);
        HttpWRequest.ContentLength = ByteQuery.Length;
        Stream QueryStream = HttpWRequest.GetRequestStream();
        // write the data to be posted to the Request Stream
        QueryStream.Write(ByteQuery,0,ByteQuery.Length);
        QueryStream.Close();
    
        // Send the request and get the response.
        HttpWebResponse HttpWResponse = (HttpWebResponse)HttpWRequest.GetResponse();
    
        // Get the Status code.
        int iStatCode =  (int)HttpWResponse.StatusCode;
        string sStatus = iStatCode.ToString();
        Console.WriteLine("Status Code: {0}", sStatus);
        // Get the request headers.
        string sReqHeaders = HttpWRequest.Headers.ToString();
        Console.WriteLine(sReqHeaders);
    
        // Read the response stream.
        Stream strm = HttpWResponse.GetResponseStream();
        StreamReader sr = new StreamReader(strm);
        string sText = sr.ReadToEnd();
        Console.WriteLine("Response: {0}", sText);
    
        // Close the stream.
        strm.Close();
    
        // Clean up.
        myCred = null;
        myCredentialCache = null;
        HttpWRequest = null;
        HttpWResponse = null;
        QueryStream = null;
        strm = null;
        sr = null;
       }
       catch (Exception e)
       {
        Console.WriteLine("{0} Exception caught.", e);
       }
      }
     }
    }
  5. Search for TODO in the code, and then modify the code for your environment.
  6. Press F5 to build and to run the program.
  7. Make sure that the e-mail message was sent and received.

Modification Type:MajorLast Reviewed:1/19/2006
Keywords:kbMsg kbhowto KB313128 kbAudDeveloper