2011-08-12 78 views
0

目前,我可以通過WebDAV與C#成功發送電子郵件,但我的應用程序中存在短缺,因此我對Outlook的Exchange Server進行了硬編碼,所以它可能只適用於我,如果它移動到另一臺PC並使用另一個Outlook帳戶,它可能無法正常工作,因爲此Outlook帳戶的Exchange Server可能與我的帳戶不一樣(這是因爲我們公司針對不同的電子郵件帳戶可能會分配不同的帳戶Exchange服務器),所以我的問題是如何動態地獲取當前電子郵件帳戶的Exchange Server。事實上,當我單擊菜單項添加一個新的Outlook帳戶時,我可以從Outlook客戶端獲得此Exchange Server,但是如果存在任何API,我可以通過編程方式獲取此Exchange Server,例如使用C#?如何從我的應用程序(C#)以編程方式獲取Exchange Server

其實我用下面的代碼來發送電子郵件:

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 = "[email protected]"; 
    // TODO: Replace with the recipient's e-mail address. 
    string strTo = "[email protected]"; 

    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服務器這個變量,所以我的問題是,有什麼API可以讓我爲特定的Outlook帳戶動態獲取Exchange Server?

謝謝!

回答

0

您可以使用EWS(Exchange Web服務)了。這裏是the link

您可以使用XML創建器來創建鏈接中操作所需的項目或請求。只需完成鏈接上的操作即可。

相關問題