如何从我的应用程序(C#)以编程方式获取Exchange Server

时间:2011-08-12 14:51:05

标签: exchange-server

目前我可以使用C#通过WebDAV成功发送电子邮件,但是我的应用程序中存在短缺,我已经对我的Outlook的Exchange Server进行了硬编码,所以它可能只适用于我,如果它被移动到另一台PC并使用另一个Outlook帐户,它可能无法正常工作,因为此Outlook帐户的Exchange Server可能与我的不一样(因为我们公司因为不同的电子邮件帐户可能会分配不同的Exchange服务器),所以我的问题是如何才能获得Exchange Server为当前电子邮件地址动态配置。实际上,当我单击菜单项以添加新的Outlook帐户时,我可以从Outlook客户端获取此Exchange Server,但是我是否有任何API以编程方式获取此Exchange Server,例如使用C#?

实际上我使用以下代码发送电子邮件:

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

正如你在代码中看到的那样,有一个名为“strServer”的变量,在我的应用程序中我只是为我的Exchange Server硬编码这个变量,所以我的问题是剂量存在任何API让我获得Exchange服务器是否为特定的Outlook帐户动态生成?

谢谢!

3 个答案:

答案 0 :(得分:0)

试试这篇文章:

Access Exchange Email C#

部分代码段可能会有所帮助。

答案 1 :(得分:0)

答案 2 :(得分:0)

您也可以使用EWS(交换Web服务)。这是the link

您可以使用XML创建者创建链接中操作所需的项目或请求。只需完成链接上的操作即可。