0

Currently I can send email successfully through WebDAV with C#, but there is a shortage in my App that I have hard-code the Exchange Server of my outlook, so it might only works for me, if it were moved to another PC and use another outlook account, it might not work because the Exchange Server for this outlook account might not the same as mine(that's beacuse our company for different email account might assign different Exchange server), so my question is that how can I get the Exchange Server for the current Email accout dynamically. In fact I can get this Exchange Server from the outlook client when I clicked the menu item to add a new Outlook Account, but dose there exist any API for me to get this Exchange Server programmatically such as with C#?

In fact I use the following code to send Email:

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);
   }
  }
 }
}

As you can see in the code there is a variable named "strServer", In my App I just hard-code my Exchange Server for this variable, so my question is that dose there exist any API for me to get the Exchange Server dynamically for the specific outlook account?

Thanks!

josen
  • 11
  • 3

1 Answers1

0

You can use EWS(exchange Web Services) too. here is the link

You can use XML creator for creating items or requests required for operations in the link. Just go through the operations given on the link.

Shweta patel
  • 105
  • 11