none
调用exchange发送邮件问题 RRS feed

  • 问题

  • 项目中后台通过exchange online 自动发送邮件。代码如下:

    using system.net.mail MailMessage msg = new MailMessage(); msg.To.Add(new MailAddress("a@abc.com.cn")); msg.From = new MailAddress("a@abc.com.cn"); msg.Subject = "自动推送"; msg.Body = "自动推送内容"; msg.IsBodyHtml = true; SmtpClient client = new SmtpClient(); client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("c@abc.com.cn", "xxxxxxx"); client.Port = 587; client.Host = "smtp.partner.outlook.cn";

    client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.Send(msg);

    以上开发环境下 win7+vs2010+.net 4.0  测试通过 没有任何问题。

    但是 项目发布后(win2003 + iis6 + .net 4),运行报错:

    调试了下 发现错误代码是发生在client.Send(msg) 这一句。结合出错信息,网上搜索了下大概意思是协议出错。说需要升级到4.5。2以上版本支持tsl 协议。 4.0/4.5版本的只是支持ssl和tls1.0   要升级到4.5以上的版本 才支持tls 1.2或更高

    但是我调试了下邮件服务器。对方使用的安全协议为 starttls,应该是ssl和tls 都支持 的  但我不知道邮件服务器安全协议的具体版本

    我的开发环境。net版本和发布后的web服务器。net都是4.0 为什么开发环境测试通过 发布环境就不行?


    nn

    2020年10月22日 4:05

全部回复

  • windows 2003 支持的tls协议版本只有1.0;


    family as water

    2020年10月22日 5:18
  • 谢谢您的回答。我现在困惑是这样:

    按照我最初的理解,这个问题不和windows2003系统环境 有关 应该是和。net版本有关。因为程序是连接exchange online 服务器587端口 进行tls协议认证。而不是windows2003 iis自身端口进行tls认证。这里发挥作用的是.net架构的程序。那么解决这个问题就在于是不是有什么技巧可以在win2003 上安装更高版本的.net环境 (比如4.5.2 runtime 有没有办安装在2003上)来解决

    但是后来一想,我开发环境是win7+vs2010 安装的也是。net 4环境。但是在vs中运行测试 又是发送邮件一切正常。这样看来又好像是和操作系统有关。因为.net环境和2003 web

    服务器上是一样的 区别只是操作系统

    所以不知道到底是操作系统的原因 还是 .net版本的原因

    目前是 不想改变2003+iis6+net 4 的环境下 有没有办法解决

    请指教 我的困惑  谢谢


    nn

    2020年10月22日 6:24