背景:现在几乎每个企业都要用到邮箱,而在大客户量情况下,为我们的不同等级的客户送上节日关怀,以及把我们的喜讯、新品通知到他们是我们急需解决的问题。效果如图

思路:

1、静态化网页模版,首先考虑需要发送什么,把需要的东西做成小而精美的html静态化页面以待发送时候用到;

2、关于发送问题,点击“发送邮件”弹出群发邮件的框,填写主题、html的服务器所在地址、收件人(多个);

3、群发的实现。

代码C#:

/// <summary>
/// 发送失败的邮箱地址搜集参数
/// </summary>
private string errorMail;

群发邮件点击事件

protected void BtnSendMail_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(txTopic.Value))
        {
            MessageShow("邮件主题必填");
            return;
        }
        if (string.IsNullOrEmpty(txUrl.Value))
        {
            MessageShow("URL内容必填");
            return;
        }
        if (string.IsNullOrEmpty(txTo.Value))
        {
            MessageShow("收件人必填");
            return;
        }

string email = ConfigurationManager.AppSettings["ManagerSendMailUserName"].ToString();  //登录用户邮箱
        string emailpwd = ConfigurationManager.AppSettings["ManagerSendMailUserPwd"].ToString(); //登录用户邮箱密码

string s = GetHtmlCode(txUrl.Value, "gb2312");
        bool restr = Sendmail(email, txTo.Value, txTopic.Value, true, s, "smtp.exmail.qq.com", email, emailpwd);
        if (restr)
        {
            ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('全部发送成功!');</script>");
        }
        else
        {
            ClientScript.RegisterStartupScript(this.GetType(), "",
            "<script>alert('已发送,但以下地址发送失败:" + errorMail + "可能是地址不存在!');</script>");
        }
    }

/// <summary>
    /// 发送邮件
    /// </summary>
    /// <param name="from">发送人邮件地址</param>
    /// <param name="to">接收人邮件地址</param>
    /// <param name="subject">邮件主题</param>
    /// <param name="isBodyHtml">是否是Html</param>
    /// <param name="body">邮件体</param>
    /// <param name="smtpHost">SMTP服务器地址,例如:smtp.163.com</param>
    /// <param name="userName">用户名</param>
    /// <param name="password">密码</param>
    /// <returns>是否成功</returns>
    public bool Sendmail(string from, string to, string subject, bool isBodyHtml, string body, string smtpHost, string userName, string password)
    {
        bool isSuccess = true;
        string[] ts = null;
        if (!string.IsNullOrEmpty(to))
        {
            if (to.Contains(";"))
                ts = to.Split(';');
            else
                ts = new string[] { to };
            foreach (string t in ts)
            {
                if (!string.IsNullOrEmpty(t))
                {
                    MailMessage mm = new MailMessage();
                    mm.From = new MailAddress(from);
                    mm.To.Add(new MailAddress(t));
                    mm.Subject = subject;
                    mm.IsBodyHtml = isBodyHtml;
                    mm.Body = body;
                    SmtpClient sc = new SmtpClient();
                    sc.Host = smtpHost;
                    sc.Port = 25;
                    sc.EnableSsl = false;
                    sc.Credentials = new NetworkCredential(userName, password);
                    sc.UseDefaultCredentials = true;
                    sc.Credentials = new System.Net.NetworkCredential(userName, password);
                    sc.DeliveryMethod = SmtpDeliveryMethod.Network;
                    try
                    {
                        sc.Send(mm);
                    }
                    catch (Exception x)
                    {
                        errorMail += t + ";";
                        isSuccess = false;
                        continue;
                    }
                }
            }
        }
        return isSuccess;
    }

/// <summary>
    /// 获取指定路径下的模板的HTML源代码
    /// </summary>
    /// <param name="TemplatePath">模板的路径</param>
    /// <param name="EncodingType">网页类型(有些是UTF8,有些是GB2312)</param>
    /// <returns>源代码</returns>
    private string GetHtmlCode(string TemplatePath, string EncodingType)
    {
        try
        {
            if (TemplatePath != string.Empty)
            {
                string ForesideUriPath = string.Empty;

if (!TemplatePath.ToLower().StartsWith("http://"))
                    ForesideUriPath = HttpContext.Current.Server.MapPath("~/") + TemplatePath;
                else
                    ForesideUriPath = TemplatePath;

WebClient webClient = new WebClient();

//设置网络凭证为系统凭证
                webClient.Credentials = CredentialCache.DefaultCredentials;

//获取指定URI的网页的源代码
                byte[] byteDataBuffer = webClient.DownloadData(ForesideUriPath);

string htmlCode = "";
                if (EncodingType == "UTF8")
                {
                    htmlCode = Encoding.UTF8.GetString(byteDataBuffer);
                }
                else
                {
                    htmlCode = Encoding.GetEncoding(EncodingType).GetString(byteDataBuffer);
                }

htmlCode = Regex.Replace(htmlCode, @"<!DOCTYPE\s*HTML\s*PUBLIC[^>]+>", "", RegexOptions.Singleline);
                htmlCode = Regex.Replace(htmlCode, @"\s+", " ", RegexOptions.Singleline);

return htmlCode;
            }
            else
            {
                return "";
            }
        }
        catch (Exception ee)
        {
            throw (ee);
        }
    }

总结:这个功能还是非常有用的,大家可以扩展,定时发送什么,实现各种烂漫的功能。最后说一声,祝大家羊年大吉,心想事成!

asp.net 客户邮件群发功能 SendMail 发送静态化html的更多相关文章

  1. asp.net mvc 性能优化——(1)静态化

    asp.net mvc 性能优化--(1)静态化 在改善页面性能的同时,可能会采用静态化的策略,对于不能实时静态化的内容,则采用缓存.本文主要讨论如何实现cshtml的静态化(实际上还不是完全的htm ...

  2. ASP.NET MVC使用SSI来实现页面静态化

    页面静态化分为两种:伪静态和真静态,这里主要介绍的是真静态. 进入正题之前先简单介绍一下SSI和shtml: 1).SSI是Server Side Include的简称(服务器端嵌入) 2).shtm ...

  3. 【转】比较详细的Asp伪静态化方法及Asp静态化探讨

    目前,各大搜索引擎如google.百度.雅虎已经对动态页面诸如asp,php有着不错的支持了,只要动态页面后面的参数不要太长,如控制在3个参数内,页面内容做点优化,各大搜索对该类页面收录甚至不比静态h ...

  4. ASP.NET MVC 页面静态化操作的思路

    本文主要讲述了在asp.net mvc中,页面静态化的几种思路和方法.对于网站来说,生成纯html静态页面除了有利于seo外,还可以减轻网站的负载能力和提高网站性能.在asp.net mvc中,视图的 ...

  5. U-Mail邮件群发触发器功能助力营销自动化

    小编在朋友圈看到的人工智能讨论越来越多,越来越多的上班族惶恐不安,担心自己的饭碗不保将被人工智能所取代,这说明智能化.自动化正成为各行业的趋势,营销也概莫能外.营销的自动化意味着将大大节省从业人员的精 ...

  6. 如何利用sendmail发送外部邮件?

    在写监控脚本时,为了更好的监控服务器性能,如磁盘空间.系统负载等,有必要在系统出现瓶颈时,及时向管理员进行报告.在这里通常采用邮件报警,同时,邮件设置为收到邮件,即向指定手机号码发送短信.这样可以实现 ...

  7. 通什翡翠商城大站协议邮件群发系统日发20-30万封不打码不换ip不需发件箱100%进收件箱

    用一种新的技术思维去群发邮件一种不用换IP,不需要任何发件箱的邮件群发方式一种不需要验证码,不需要**代码变量的邮件群发方式即使需要验证码也能全自动识别验证码的超级智能软件教你最核心的邮件群发思维和软 ...

  8. 懒人邮件群发日发50-100万封不打码不换IP不需发件箱大站协议系统营销软件100%进收件箱

    用一种新的技术思维去群发邮件 一种不用换IP,不需要任何发件箱的邮件群发方式 一种不需要验证码,不需要**代码变量的邮件群发方式 即使需要验证码也能全自动识别验证码的超级智能软件 教你最核心的邮件群发 ...

  9. 2017U-Mail邮件营销平台新邮件模板功能

    据U-Mail调查表明,企业用户中普遍最关心群发邮件会不会被列入垃圾箱?的确,哪怕你最用功,一旦邮件进了垃圾箱,意味着全盘尽废.业界知名服务商U-Mail一直想用户之所想,急用户之所急,十几年如一日, ...

随机推荐

  1. C++ Code_StatusBar

    主题 1. 创建状态栏 并显示 2. 在状态栏中显示进度条 3. MDI文档显示和隐藏状态栏 4. 5.     代码::创建状态栏 并显示 //手动添加3个ICON //////////////// ...

  2. Android 动画机制与使用技巧

    动画效果一直是人机交互中非常重要的部分,与死板.突兀的显示效果不同,动画效果的加入,让交互变得更加友好,特别是在提示.引导类的场景中,合理地使用动画能让用户获得更加愉悦的使用体验 一.Android ...

  3. 基于jQuery的美食时间轴焦点图插件

    这是一款非常炫酷的jQuery焦点图插件,这款jQuery焦点图的特点是有一个时间轴,点击切换按钮时,时间轴会逐渐移动,时间轴上的图片也会逐渐切换.另外,在图片上方也可以放置自定义样式的文字. 在线预 ...

  4. Golang学习 - 学习资源列表

    Golang 学习资源: <Go 语言圣经(中文版)>  - 书籍 http://shinley.com/index.html <学习 Go 语言> - 书籍 http://w ...

  5. [Buzz.Today]2013.08.06

    # 用简单方案解决80%的问题,再慢慢解决剩下20% [先完成,后完美]美国工程院院士.Google Fellow辛格的哲学:先用个简单方案解决80%的问题,再慢慢解决剩下20%.许多优秀人才都败在这 ...

  6. 使用java8

    刚开始一直使用的jdk7,但是学习spark的时候spark推荐Jdk8,很多示例程序都用到了lambda 机器上安装jdk8只是实验用途,默认还想使用jdk7 安装完后 网上说这是因为jdk8安装的 ...

  7. 客户端动态化系列之——Weex

    来源:kuailejim 链接:http://www.jianshu.com/p/ea25fd834944 客户端动态化系列之--URLRoute 在前端越来越火的年代,逐渐衍生出类似React Na ...

  8. IOS 区分缓存 内存 物理存储 逻辑存储

    1. 存储器分为内部存储器(内存)和外部存储器(外存). ①内存 内存是电脑内部临时存放数据的地方,供CPU直接读取,存放在其中的数据要靠电来维持,一旦断电就会丢失.因此,在操作电脑时,应及时地将需要 ...

  9. [Java] String.Split 方法的6个重载函数

    String.Split 方法有6个重载函数: 程序代码 1) public string[] Split(params char[] separator) 2) public string[] Sp ...

  10. web前端开发(1)

    web标准 结构标准.样式标准.行为标准分离 结构标准:xml xhtml  html 样式标准:css 行为标准:DOM  ECMAScript 符合标准的网页:1.标签小写  2.属性加引号 3. ...