zoukankan      html  css  js  c++  java
  • 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         /// 邮箱密码(默认为发送者邮箱的密码),默认格式GB2312
    105         /// </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         #endregion
    119 
    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                     try
    136                     {
    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                     try
    152                     {
    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                     try
    168                     {
    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                     try
    184                     {
    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             try
    195             {
    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 SmtpClient
    217             {
    218                 Host = this.Host,
    219                 Credentials = new NetworkCredential(this.UserName, this.Password)
    220             };
    221             //认证
    222             try
    223             {
    224                 smtpClient.Send(mailMessage);
    225             }
    226             catch (Exception ex)
    227             {
    228                 throw new Exception(ex.Message);
    229             }
    230         }
    231 
    232         #endregion
    233     }
    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 EmailInfo
    243     {
    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 Email
    268             {
    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 = password
    279             };
    280             try
    281             {
    282                 emil.Send();
    283                 return true;
    284             }
    285             catch (Exception ex)
    286             {
    287                 throw new Exception(ex.Message);
    288             }
    289         }
    290     }
    291 }
  • 相关阅读:
    php之异常处理
    php7之严格模式RFC
    获取真实ip三个方法
    php网站速度性能优化(转)
    PHPweb应用攻击总结(转)
    PHP安全之Web攻击(转)
    php获取真实ip地址(转)
    单表查询
    表与表之间的关系
    表的操作
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/smtp.html
Copyright © 2011-2022 走看看