Windows Server 2008 R2 配置Exchange 2010郵件服務器並使用EWS發送郵件


目錄

 

 

配置環境

配置環境完全在此前一篇文章搭建好的環境下進行配置:

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)         

 

安裝准備
  1. 安裝DNS服務器
  2. 安裝AD域服務
  3. 安裝IIS
  4. 安裝.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

http://support.microsoft.com/kb/968929/zh-cn

步驟 3: 選擇 Exchange 語言選項

          點擊“僅從 DVD 安裝語言”

 

步驟 4: 安裝 Microsoft Exchange

          點擊后出現復制窗口

復制完成,初始化好安裝程序,會出現Exhcange Server 2010安裝界面

點擊“下一步”按鈕

選擇"我接受許可協議中的條款",點擊“下一步”按鈕

點擊“下一步”按鈕

點擊“下一步按鈕”

輸入Exchange 組織名稱,點擊“下一步”按鈕

勾選上"客戶端訪問角色將面向 Internet"  (如果只供內網訪問,可以不勾選)

輸入域名,點擊“下一步”按鈕

這一步隨自已選擇,然后點擊“下一步”按鈕,進入“准備情況檢查”

 

出現3個警告和1個錯誤

 ①警告:組織先決條件

  

  解法方法:忽略

 ②警告:集線器傳輸角色 先決條件

  

  解決方法:按照提示去 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”--->進行如下圖配置

 

設置DNS

控制面板--->網絡和 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

http://wenku.baidu.com/view/720dc0114431b90d6c85c71d.html

 

編寫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 身份驗證”后,上述問題不會再出現!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM