目前我可以使用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帐户动态生成?
谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
对于Exchange 2000/2003,请按照下列步骤操作: http://www.infinitec.de/post/2004/12/31/Get-the-WebDAV-url-for-an-Exchange-20002003-mailbox.aspx
答案 2 :(得分:0)
您也可以使用EWS(交换Web服务)。这是the link
您可以使用XML创建者创建链接中操作所需的项目或请求。只需完成链接上的操作即可。