IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 网络编程 > .Net编程 > 浅谈Asp.net实现的邮件发送引擎

浅谈Asp.net实现的邮件发送引擎

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

    用asp.net发送Email已经不是一件新鲜的事情了.可以采用很多种方法来发送,比如SmtpMail方法,Socket方法,通过第三方组件Jmail等方式都可以.但是本文讨论的不是发送邮件采用的技术,而是通过公司的一个项目实践说说邮件引擎的架构,有不足和改进之处,欢迎同行批评指正.

    我们以前发送邮件的时候采用的方法就是,在页面里面触发进行发送,比如注册了会员,点了提交按钮之后,将会员数据插入到数据库,然后进行发送.这种方法虽然简单方便,但是有一个弱点,如果邮件发送失败,就不能重发了.因此,在我们项目中采用的方法是,将需要发送的邮件统一插入到一个邮件队列,然后由引擎来处理这个队列.具体的做法是,数据库设计:

Win_EmailQueue(邮件队列表)
QueueId    int   自动编号,主键Id
ToEmail    nvarchar(100)  收件人
Title      nvarchar(100)  邮件标题
Content    ntext    邮件内容
AddDate    datetime 添加时间
TryTimes   int      错误重试次数
LastSendTime datetime     最后一次发送的时间
Status     int      状态:0 未发送 1 已经发送

    需要发送邮件的时候,如注册会员成功后,将邮件的内容插入到表中.

    邮件引擎可以用一个系统服务来完成,安装在Web服务器同一台服务器上面,也可以根据负载实际情况安装在另外一台服务器上面,减轻Web服务器负担.邮件引擎的任务是间隔一个时间(比如5秒),查询邮件队列,根据时间顺序发送邮件,为了降低引擎的负担,可以设置每次发送15封,当然这个数字要根据实际情况来配置.

    以下是处理队列和发送邮件的一些代码.

 ///
  /// 发送Email队列,
  ///
  public static void SendEmailQueue()
  {
      //取最新的15条未成功的进行发送。
      string sql = &select top 15 * from Win_EmailQueue where Status=0 and ToEmail<>'' order by AddDate desc&;
      DataTable dt = DbHelperSQL.Query(sql).Tables[0];
      for (int i = 0; i < dt.Rows.Count; i++)
      {
    string title = dt.Rows[i][&Title&].ToString();
    string content = dt.Rows[i][&Content&].ToString();
    string to = dt.Rows[i][&ToEmail&].ToString();
    string CreateTime = dt.Rows[i][&AddDate&].ToString();
    string QueueID = dt.Rows[i][&QueueID&].ToString();
    bool flag = EmailUtil.Send(title, to, content);
    if (flag)
    {
      //发送成功,将Status设置为1
  sql = &update  Win_EmailQueue set Status=1 where QueueID=& + QueueID + &&;
    }
    else
    {
      //发送失败,将失败次数增加1
  sql = &update   Win_EmailQueue set TryTimes=TryTimes+1,LastSendTime='& + DateTime.Now.ToString() + &' where QueueID=& + QueueID + &&;
    }
    DbHelperSQL.ExecuteSql(sql);
      }
      dt.Dispose();
      //超过10次未成功的邮件,将不再发送
      sql = &update  Win_EmailQueue set Status=1  where TryTimes>10&;
      DbHelperSQL.ExecuteSql(sql);
  }
 ///
  /// 执行发送操作
  ///
  ///
  public static bool Send(string title, string to, string content)
  {
      //来自配置项
      string fromemail = System.Configuration.ConfigurationManager.AppSettings[&SMTPUserName&];
      string smtpserver = System.Configuration.ConfigurationManager.AppSettings[&SMTPServer&];
      string frompwd = System.Configuration.ConfigurationManager.AppSettings[&SMTPPass&];
      string fromaddress = System.Configuration.ConfigurationManager.AppSettings[&SMTPNickName&];
      MailMessage mail = new MailMessage();
      mail.From = new MailAddress(fromemail, fromaddress, Encoding.GetEncoding(&gb2312&));//发件人的邮箱
      mail.To.Add(new MailAddress(to));//收件人
      mail.Subject = title;//主题
      mail.Body = content;//内容
      mail.IsBodyHtml = true;
      mail.SubjectEncoding = Encoding.GetEncoding(&gb2312&);
      mail.BodyEncoding = Encoding.GetEncoding(&gb2312&);
      mail.IsBodyHtml = true;
      mail.Priority = MailPriority.Normal;
  &nb

关键词标签:Asp.net

相关阅读 ASP.NET创建XML Web服务全接触 如何提高ASP.NET页面载入速度的方法 .net导出海量数据到execl文件 ASP.NET 2.0程序安全的基础知识 ASP.NET中MD5与SHA1加密的几种方法 在.net开发中几个重要的认识误区

文章评论
发表评论

热门文章 在ASP.NET MVC中实现大文件异步上传 在ASP.NET MVC中实现大文件异步上传 在.NET环境下为网站增加IP过滤功能 在.NET环境下为网站增加IP过滤功能 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 ASP.NET 如何避免页面重新整理时重复送出 ASP.NET 如何避免页面重新整理时重复送出 钟离圣遗物推荐-原神钟离圣遗物词条 钟离圣遗物推荐-原神钟离圣遗物词条

相关下载

人气排行 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 asp.net表单提交方法GETPOST 在ASP.NET中如何判断用户IE浏览器的版本 Asp.net中messagebox的实现方法 Asp.net中的web.config配置 在ASP.NET MVC中实现大文件异步上传 asp.net获取URL和IP地址 FileUpload上传多文件出现错误的解决方法 ASP.NET Web.config配置详解 Asp.net常用的51个代码(非常实用) ASP.NET打开word文档出错的解决办法 让你的.NET程序兼容不同版本的Dll文件