程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Smtp郵件發送系統公用代碼整理—總結,smtp郵件發送系統

Smtp郵件發送系統公用代碼整理—總結,smtp郵件發送系統

編輯:C#入門知識

Smtp郵件發送系統公用代碼整理—總結,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">發送者郵箱名稱(從配置文件中讀取,比如:[email protected])(必填項)</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">郵箱服務器(從配置文件中讀取,如:[email protected])(必填項)</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 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved