你的位置:首页 > ASP.net教程

[ASP.net教程]Smtp邮件发送系统公用代码整理—总结


1.前言

  a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等。那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一下:总结不全,纯属于整理封装的类。

    (1):用户注册(推送邮件,提示用户注册成功,牢记用户名密码)

    (2):修改密码(推送邮件,提示用户密码修改成功)

    (3):下订单(推送邮件,提示用户订单已下)

    (4):物流跟踪(推送邮件,跟踪物流信息)

    (5):广告推送(推送广告,提示用户近来公司近况或者新的商品,产品)

    (6):日志监控系统推送(推送错误信息,提供给程序员使用)

    ................................................

  b.上面我们说了邮件推送的使用,那么既然邮件推送这么频繁,就需要整理出来一个公用类来给大家使用,下面我就简单整理了一下公用类,如果大家需要,请git上下载或者复制即可,不能保证百分百实现你的功能,如果不能实现你的功能,请改进。

  c.git下载地址:https://github.com/kencery/Common/tree/master/KenceryCommonMethod/Smtp%E9%82%AE%E4%BB%B6%E5%8F%91%E9%80%81

  d.代码整理如下,请您查看.......

2.代码整理

  a.C#代码以及如何调用等都在代码中已注释,如不会使用,请仔细查看

 1 // 源文件头信息: 2 // <copyright file="Email.cs,EmailHelp.cs"> 3 // Copyright(c)2014-2034 Kencery.All rights reserved. 4 // 个人博客:http://www.cnblogs.com/hanyinglong 5 // 创建人:韩迎龙(kencery) 6 // 创建时间:2015-8-18 7 // </copyright> 8  9 using System; 10 using System.Net; 11 using System.Net.Mail; 12 using System.Text; 13  14 namespace KenceryCommonMethod 15 { 16   /// <summary> 17   /// 功能:实现邮件发送,分装发送邮件的调用方法 18   /// </summary> 19   /// <auther> 20   ///   <name>Kencery</name> 21   ///   <date>2015-8-18</date> 22   /// </auther> 23   public class Email 24   { 25     #region --------------------字段-------------------- 26  27     private string _serviceType = "SMTP"; 28     private string _host; 29  30     #endregion 31  32     #region --------------------属性-------------------- 33  34     /// <summary> 35     /// 发送者邮箱 36     /// </summary> 37     public string From { get; set; } 38  39     /// <summary> 40     /// 接收者邮箱列表 41     /// </summary> 42     public string[] To { get; set; } 43  44     /// <summary> 45     /// 抄送者邮箱列表 46     /// </summary> 47     public string[] Cc { get; set; } 48  49     /// <summary> 50     /// 秘抄者邮箱列表 51     /// </summary> 52     public string[] Bcc { get; set; } 53  54     /// <summary> 55     /// 邮件主题 56     /// </summary> 57     public string Subject { get; set; } 58  59     /// <summary> 60     /// 邮件内容 61     /// </summary> 62     public string Body { get; set; } 63  64     /// <summary> 65     /// 是否是HTML格式 66     /// </summary> 67     public bool IsBodyHtml { get; set; } 68  69     /// <summary> 70     /// 附件列表 71     /// </summary> 72     public string[] Attachments { get; set; } 73  74     /// <summary> 75     /// 邮箱服务类型(Pop3,SMTP,IMAP,MAIL等),默认为SMTP 76     /// </summary> 77     public string ServiceType 78     { 79       get { return _serviceType; } 80       set { _serviceType = value; } 81     } 82  83     /// <summary> 84     /// 邮箱服务器,如果没有定义邮箱服务器,则根据serviceType和Sender组成邮箱服务器 85     /// </summary> 86     public string Host 87     { 88       get 89       { 90         return string.IsNullOrEmpty(_host) 91           ? (this.ServiceType + "." + 92            Sender.Split("@".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]) 93           : _host; 94       } 95       set { _host = value; } 96     } 97  98     /// <summary> 99     /// 邮箱账号(默认为发送者邮箱的账号)100     /// </summary>101     public string UserName { get; set; }102 103     /// <summary>104     /// 邮箱密码(默认为发送者邮箱的密码),默认格式GB2312105     /// </summary>106     public string Password { get; set; }107 108     /// <summary>109     /// 邮箱优先级110     /// </summary>111     public MailPriority MailPriority { get; set; }112 113     /// <summary>114     /// 邮件正文编码格式115     /// </summary>116     public Encoding Encoding { get; set; }117 118     #endregion119 120     #region ------------------调用方法------------------121 122     /// <summary>123     /// 构造参数,发送邮件,使用方法备注:公开方法中调用124     /// </summary>125     public void Send()126     {127       var mailMessage = new MailMessage();128 129       //读取To 接收者邮箱列表130       if (this.To != null && this.To.Length > 0)131       {132         foreach (string to in this.To)133         {134           if (string.IsNullOrEmpty(to)) continue;135           try136           {137             mailMessage.To.Add(new MailAddress(to.Trim()));138           }139           catch (Exception ex)140           {141             throw new Exception(ex.Message);142           }143         }144       }145       //读取Cc 抄送者邮件地址146       if (this.Cc != null && this.Cc.Length > 0)147       {148         foreach (var cc in this.Cc)149         {150           if (string.IsNullOrEmpty(cc)) continue;151           try152           {153             mailMessage.CC.Add(new MailAddress(cc.Trim()));154           }155           catch (Exception ex)156           {157             throw new Exception(ex.Message);158           }159         }160       }161       //读取Attachments 邮件附件162       if (this.Attachments != null && this.Attachments.Length > 0)163       {164         foreach (var attachment in this.Attachments)165         {166           if (string.IsNullOrEmpty(attachment)) continue;167           try168           {169             mailMessage.Attachments.Add(new Attachment(attachment));170           }171           catch (Exception ex)172           {173             throw new Exception(ex.Message);174           }175         }176       }177       //读取Bcc 秘抄人地址178       if (this.Bcc != null && this.Bcc.Length > 0)179       {180         foreach (var bcc in this.Bcc)181         {182           if (string.IsNullOrEmpty(bcc)) continue;183           try184           {185             mailMessage.Bcc.Add(new MailAddress(bcc.Trim()));186           }187           catch (Exception ex)188           {189             throw new Exception(ex.Message);190           }191         }192       }193       //读取From 发送人地址194       try195       {196         mailMessage.From = new MailAddress(this.From);197       }198       catch (Exception ex)199       {200         throw new Exception(ex.Message);201       }202 203       //邮件标题204       Encoding encoding = Encoding.GetEncoding("GB2312");205       mailMessage.Subject = string.Format("?={0}?B?{1}?=", encoding.HeaderName,206         Convert.ToBase64String(encoding.GetBytes(this.Subject), Base64FormattingOptions.None));207       //邮件正文是否为HTML格式208       mailMessage.IsBodyHtml = this.IsBodyHtml;209       //邮件正文210       mailMessage.Body = this.Body;211       mailMessage.BodyEncoding = this.Encoding;212       //邮件优先级213       mailMessage.Priority = this.MailPriority;214 215       //发送邮件代码实现216       var smtpClient = new SmtpClient217       {218         Host = this.Host,219         Credentials = new NetworkCredential(this.UserName, this.Password)220       };221       //认证222       try223       {224         smtpClient.Send(mailMessage);225       }226       catch (Exception ex)227       {228         throw new Exception(ex.Message);229       }230     }231 232     #endregion233   }234 235   /// <summary>236   ///邮件发送接口调用:bool isTrue=EmailInfo.SendEmail(参数,........);  参数解释参考方法237   /// <auther>238   ///   <name>Kencery</name>239   ///   <date>2015-8-18</date>240   /// </auther>241   /// </summary>242   public static class EmailInfo243   {244     /// <summary>245     /// 邮件发送方法,传递参数(使用中如出现问题,请调试)246     /// </summary>247     /// <param name="from">发送者邮箱名称(从配置文件中读取,比如:934532778@qq.com)(必填项)</param>248     /// <param name="to">接收者邮箱列表,可以传递多个,使用string[]表示(从配置文件中读取)(必填项)</param>249     /// <param name="cc">抄送者邮箱列表,可以传递多个,使用string[]表示(从配置文件中读取)</param>250     /// <param name="bcc">秘抄者邮箱列表,可以传递多个,使用string[]表示(从配置文件中读取)</param>251     /// <param name="subject">邮件主题,构造(必填项)</param>252     /// <param name="body">邮件内容,构造发送的邮件内容,可以发送网页(必填项)</param>253     /// <param name="isBodyHtml">是否是HTML格式,true为是,false为否</param>254     /// <param name="attachments">邮箱附件,可以传递多个,使用string[]表示(从配置文件中读取),可空</param>255     /// <param name="host">邮箱服务器(从配置文件中读取,如:smtp@qq.com)(必填项)</param>256     /// <param name="password">邮箱密码(从配置文件中读取,from邮箱的密码)(必填项)</param>257     /// <returns>邮件发送成功,返回true,否则返回false</returns>258     public static bool SendEmail(string from, string[] to, string[] cc, string[] bcc, string subject, string body,259       bool isBodyHtml, string[] attachments, string host, string password)260     {261       //邮箱发送不满足,限制这些参数必须传递262       if (from == "" || to.Length <= 0 || subject == "" || body == "" || host == "" || password == "")263       {264         return false;265       }266 267       var emil = new Email268       {269         From = @from,270         To = to,271         Cc = cc,272         Bcc = bcc,273         Subject = subject,274         Body = body,275         IsBodyHtml = isBodyHtml,276         Attachments = attachments,277         Host = host,278         Password = password279       };280       try281       {282         emil.Send();283         return true;284       }285       catch (Exception ex)286       {287         throw new Exception(ex.Message);288       }289     }290   }291 }