目錄 |
配置環境 |
配置環境完全在此前一篇文章搭建好的環境下進行配置:
http://www.cnblogs.com/zhongweiv/archive/2013/01/04/win2008_addomain_configuration.html
Windows版本:Windows Server 2008 R2 Enterprise
Service Pack 1
系統類型: 64 位操作系統
所在域: adserv.com
Exchange版本:Exchange Server 2010 (x64) - DVD (Chinese-Simplified, Chinese-Traditional, English, French, German, Italian, Japanese, Korean, Portuguese-Brazil, Russian, and Spanish)
安裝准備 |
- 安裝DNS服務器
- 安裝AD域服務
- 安裝IIS
- 安裝.NetFramework 3.5 SP1
安裝准備第1、2、3步都在此前的文章中有詳細的安裝步驟和配置方法:
http://www.cnblogs.com/zhongweiv/archive/2013/01/04/win2008_addomain_configuration.html
http://www.cnblogs.com/zhongweiv/archive/2013/01/07/https.html
安裝准備第4步 .NetFramework 3.5 SP1 不是必須的,Exchange Server 2010安裝時會做檢查,可以在安裝Exchange Server 2010時同步安裝.
安裝Exchange Server 2010 |
我這里是ISO文件,我在直用虛機中的光驅加載,並點擊運行 Setup.EXE
步驟 1、2都是灰色的,我提前安裝了.Net Framework 3.5 SP1,Windows Server 2008 R2自帶安裝了Windows PowerShell V2
單獨下載地址:
http://www.microsoft.com/zh-cn/download/details.aspx?id=25150
步驟 3: 選擇 Exchange 語言選項
點擊“僅從 DVD 安裝語言”
步驟 4: 安裝 Microsoft Exchange
點擊后出現復制窗口
復制完成,初始化好安裝程序,會出現Exhcange Server 2010安裝界面
點擊“下一步”按鈕
選擇"我接受許可協議中的條款",點擊“下一步”按鈕
點擊“下一步”按鈕
點擊“下一步按鈕”
輸入Exchange 組織名稱,點擊“下一步”按鈕
勾選上"客戶端訪問角色將面向 Internet" (如果只供內網訪問,可以不勾選)
輸入域名,點擊“下一步”按鈕
這一步隨自已選擇,然后點擊“下一步”按鈕,進入“准備情況檢查”
①警告:組織先決條件
解法方法:忽略
②警告:集線器傳輸角色 先決條件
解決方法:按照提示去 http://go.microsoft.com/fwlink/?LinkID=123380 下載 FilterPackx64.exe ,並安裝它.
③警告:郵箱角色 先決條件
④錯誤:客戶端訪問 先決條件
解決方法:開始菜單--->管理工具--->服務--->找到“Net.Tcp Port Sharing Service”--->啟動類型設為“自動”,並且啟用此服務
進行上面這些操作之后,重啟服務器,再運行Exchange Server 2010安裝程序!
點擊“安裝”按鈕, 安裝時間可能比較長.
點擊完成.
配置連接器 |
當Exchange Server 2010安裝完成后,會自動彈出 Exchange 管理控制台
在左側控制台樹,中選擇Microsoft Exchange--->Microsoft Exchange的內部部署--->組織配置--->集線器傳輸--->右鍵“新建發送連接器”
輸入連接器名稱,點擊“下一步”按鈕
選擇“添加”菜單,點擊“SMTP 地址空間”
在彈出框中輸入如圖,點擊“下一步”按鈕
剛添加的“SMTP 地址空間”就會出現在列表中,直接“下一步”
選擇如圖,點擊“下一步”按鈕
直接“下一步”
確認配置信息,點擊“新建”
查看新建狀態,點擊“完成”
在左側控制台樹,中選擇Microsoft Exchange--->Microsoft Exchange的內部部署--->服務器配置--->集線器傳輸--->接收連接器
--->雙擊Client Porschev--->配置如下圖
在左側控制台樹,中選擇Microsoft Exchange--->Microsoft Exchange的內部部署--->服務器配置--->集線器傳輸--->接收連接器
--->雙擊Default Porschev--->配置如下圖
http://technet.microsoft.com/zh-CN/library/bb124931(v=exchg.141).aspx
在左側控制台樹,中選擇Microsoft Exchange--->Microsoft Exchange的內部部署--->組織配置--->集線器傳輸--->選擇“遠程域”--->雙擊列表中的“Default”--->進行如下圖配置
控制面板--->網絡和 Internet--->網絡和共享中心--->本地連接--->屬性--->Internet 協議版本 4(TCP/IPv4屬性)--->屬性
--->高級--->DNS選擇卡--->添加本地IP
新建郵箱,測試收發 |
在左側控制台樹,中選擇Microsoft Exchange--->Microsoft Exchange的內部部署--->收件人配置--->郵箱--->右鍵“新建郵箱”
選擇“用戶郵箱”,點擊“下一步”按鈕
選擇“新建用戶”,點擊“下一步”按鈕
輸入必要信息,點擊“下一步”按鈕
輸入別名,指定數據庫
點擊“下一步”按鈕
點擊“新建”按鈕
“郵箱-整個林”中就可以看見新建的郵箱,為了測試,我建了兩個郵箱
在AD域中查看,這兩個用戶也同樣創建了域用戶
測試收發 |
在局域網中的另外一台機器上訪問Exchange Web版:https://192.168.206.103/owa/
或者 https://mail.adserv.com/owa/ (在DNS管理中手動添加mail.adserv.com的解析)
測試發送郵件
用創建的zw帳號登錄,登錄成功,表示Exchange安裝配置沒有什么問題
發送一封郵件給另一個測試帳號,發送成功!
用測試收郵件帳號登錄,收件箱中有剛發的測試郵件!
至此,Exchange Server 2010環境搭建和收發郵件的配置就已完成!
參考資料:
http://technet.microsoft.com/zh-cn/library/bb124558(v=exchg.141).aspx
編寫C#程序用EWS(Exchange WebService)發送郵件 |
EWS的地址:https://mail.adserv.com/ews/Services.asmx
或者:https://mail.adserv.com/ews/exchange.asmx
通過瀏覽器訪問:
![]()
輸入用戶名,密碼登錄
新建一個Web Application項目,添加Web引用:https://192.168.206.103/ews/Services.asmx
發送郵件代碼:
using System; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using ExchangeEWS.com.adserv.mail; namespace ExchangeEWS { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnSend_Click(object sender, EventArgs e) { bool resultVal = SendMailExchange(txtSendAccount.Text.Trim(), txtSendPwd.Text.Trim(), txtSendEmail.Text.Trim(), txtRecEmail.Text.Trim(), txtDomain.Text.Trim(), txtEws.Text.Trim(), "測試郵件主題", "測試EWS發送郵件正文"); if (resultVal) { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('發送成功')</script>"); } else { Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('發送失敗')</script>"); } } #region## Send mail (Exchange) /// <summary> /// Function: Send mail (Exchange) /// Created by: Wilson Zhong /// Data: 2012-12-11 /// </summary> /// <param name="credentialUserName">Credential user name [example: user1]</param> /// <param name="credentialUserPwd">Credential user password [example: abcd]</param> /// <param name="senderEmail">Sender email [example: user1@adserv.com]</param> /// <param name="recipientEmail">Recipient email [example: user2@adserv.com]</param> /// <param name="domainName">Domain name [example: adserv.com]</param> /// <param name="ewsUrl">EWS URL [example: https://mail.adserv.com/ews/exchange.asmx]</param> /// <param name="subjectName">Email subject</param> /// <param name="bodyVal">Email body</param> /// <returns></returns> public static bool SendMailExchange(string credentialUserName, string credentialUserPwd, string senderEmail, string recipientEmail, string domainName, string ewsUrl, string subjectName, string bodyVal) { SetCertificatePolicy(); ExchangeServiceBinding esb = new ExchangeServiceBinding(); esb.Credentials = new NetworkCredential(credentialUserName, credentialUserPwd, domainName); esb.Url = ewsUrl; CreateItemType createItemRequest = new CreateItemType(); // Specifiy how the created items are handled createItemRequest.MessageDisposition = MessageDispositionType.SendAndSaveCopy; createItemRequest.MessageDispositionSpecified = true; // Specify the location of sent items. createItemRequest.SavedItemFolderId = new TargetFolderIdType(); DistinguishedFolderIdType sentitems = new DistinguishedFolderIdType(); sentitems.Id = DistinguishedFolderIdNameType.sentitems; createItemRequest.SavedItemFolderId.Item = sentitems; // Create the array of items. createItemRequest.Items = new NonEmptyArrayOfAllItemsType(); // Create a single e-mail message. MessageType message = new MessageType(); message.Subject = subjectName; message.Body = new BodyType(); message.Body.BodyType1 = BodyTypeType.HTML; message.Body.Value = bodyVal; message.ItemClass = "IPM.Note"; message.Sender = new SingleRecipientType(); message.Sender.Item = new EmailAddressType(); message.Sender.Item.EmailAddress = senderEmail; message.ToRecipients = new EmailAddressType[1]; message.ToRecipients[0] = new EmailAddressType(); message.ToRecipients[0].EmailAddress = recipientEmail; message.Sensitivity = SensitivityChoicesType.Normal; // Add the message to the array of items to be created. createItemRequest.Items.Items = new ItemType[1]; createItemRequest.Items.Items[0] = message; try { // Send the request to create and send the e-mail item, and get the response. CreateItemResponseType createItemResponse = esb.CreateItem(createItemRequest); // Determine whether the request was a success. if (createItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Error) { //throw new Exception(createItemResponse.ResponseMessages.Items[0].MessageText); return false; } else { return true; } } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } } #endregion #region## Certificate /// <summary> /// Function: Set the certificate policy /// Create by: Wilson Zhong /// Data: 2012-12-11 /// </summary> private static void SetCertificatePolicy() { ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate; } /// <summary> /// Function: Remote certificate validation /// Created by: Wilson Zhong /// Data: 2012-12-11 /// </summary> private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) { return true; } #endregion } }
測試程序發送郵件 |
運行程序,輸入必要項,測試發送.
登錄Web版Exchange,查看是否收到郵件
至此,用EWS發送郵件也成功!
Demo下載:http://files.cnblogs.com/zhongweiv/ExchangeEWS.zip
EWS的功能很明顯不會只有發郵件,更多EWS相關資料:
http://msdn.microsoft.com/en-us/library/exchangewebservices(v=exchg.140).aspx
http://msdn.microsoft.com/zh-cn/library/exchange/dd877030(v=exchg.140).aspx
故障排除 |
問題描述:在最初安裝配置完成后,能正常訪問Exchange的Web頁面,但是輸入用戶名和密碼怎么也登錄不成功,一直提示用戶名密碼不正確
問題解決:反復確認用戶名和密碼確實沒有輸入錯誤后,發現IIS中“安全性”下都沒有安裝,裝上“基本身份驗證”和“Windows 身份驗證”后,上述問題不會再出現!