Как я могу получить Exchange Server программно из моего приложения (C #) - PullRequest
0 голосов
/ 12 августа 2011

В настоящее время я могу успешно отправлять электронную почту через WebDAV с помощью C #, но в моем приложении существует недостаток, заключающийся в том, что я жестко закодировал Exchange Server своего внешнего вида, поэтому он может работать только для меня, если он был перенесен на другой компьютер и использовать другую учетную запись Outlook, она может не работать, потому что сервер Exchange для этой учетной записи Outlook может отличаться от моего (это потому, что наша компания для другой учетной записи электронной почты может назначить другой сервер Exchange), поэтому мой вопрос заключается в том, как я могу получить Сервер Exchange для текущей электронной почты накапливается динамически. На самом деле, я могу получить этот Exchange-сервер от клиента Outlook, когда щелкну по пункту меню, чтобы добавить новую учетную запись Outlook, но у меня есть какой-то API, чтобы программно получить этот Exchange-сервер, например, с 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 голосов
/ 12 августа 2011

Для Exchange 2000/2003 выполните следующие действия: http://www.infinitec.de/post/2004/12/31/Get-the-WebDAV-url-for-an-Exchange-20002003-mailbox.aspx

0 голосов
/ 22 августа 2011

Вы также можете использовать EWS (Exchange Web Services). вот ссылка

Вы можете использовать XML создатель для создания элементов или запросов, необходимых для операций по ссылке. Просто выполните операции, приведенные по ссылке.

0 голосов
/ 12 августа 2011

попробуйте это сообщение:

Доступ к электронной почте Exchange C #

Некоторые фрагменты кода могут быть полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...