• 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下载:https://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 身份验证”后,上述问题不会再出现!

  • 相关阅读:
    Coursera 高级数据结构与算法,北京大学
    heap 算法函数
    笛卡尔树 Cartesian tree
    POJ 1830 开关问题 异或高斯消元
    jmeterJSR223取样器和断言
    Flask JinJa2模板语法测试
    Python Flask Web 试题汇编<待续>
    jsDoc自动生成文档
    SQL 优化
    IO多路复用之select、poll、epoll的区别
  • 原文地址:https://www.cnblogs.com/zhongweiv/p/WindowsServer2008R2_Exchange2010_EWS.html
Copyright © 2020-2023  润新知