首页 > 代码库 > C#通过拼接协议的方式来发送邮件类库

C#通过拼接协议的方式来发送邮件类库

  1 using System;  2 using System.Collections.Generic;  3 using System.Net;  4 using System.Net.Mail;  5 using System.Net.Sockets;  6 using System.Text;  7   8 namespace HR.Common  9 { 10     #region SMTP Client 11     public class SMTPClient : TcpClient 12     { 13         /// <summary> 14         /// 是否链接 15         /// </summary> 16         /// <returns></returns> 17         public bool isConnected() 18         { 19             return Active; 20         } 21  22         /// <summary> 23         /// 向服务器发送指令 24         /// </summary> 25         /// <param name="Command">指令内容</param> 26         public void SendCommandToServer(string Command) 27         { 28             NetworkStream ns = this.GetStream(); 29             byte[] WriteBuffer = null; 30             WriteBuffer = new byte[Command.Length]; 31             WriteBuffer = Encoding.Default.GetBytes(Command); 32             ns.Write(WriteBuffer, 0, WriteBuffer.Length); 33             return; 34         } 35  36         /// <summary> 37         /// 返回服务器处理结果 38         /// </summary> 39         /// <returns></returns> 40         public string GetServerResponse() 41         { 42             int StreamSize; 43             string ReturnValue = http://www.mamicode.com/""; 44             byte[] ReadBuffer; 45             NetworkStream ns = this.GetStream(); 46  47             ReadBuffer = new byte[1024]; 48             StreamSize = ns.Read(ReadBuffer, 0, ReadBuffer.Length); 49             if (StreamSize == 0) 50             { 51                 return ReturnValue; 52             } 53             else 54             { 55                 ReturnValue =http://www.mamicode.com/ Encoding.Default.GetString(ReadBuffer); 56                 return ReturnValue; 57             } 58         } 59  60         /// <summary> 61         /// 生成SMTPCode 62         /// </summary> 63         /// <param name="s">信息内容</param> 64         /// <param name="SMTPCode">SMTPCode</param> 65         /// <returns></returns> 66         public bool DoesStringContainSMTPCode(string s, string SMTPCode) 67         { 68             return (s.IndexOf(SMTPCode, 0, 10) == -1) ? false : true; 69         } 70  71     } 72     #endregion 73  74     #region SckMail 75     public class SckMail 76     { 77         /// <summary> 78         /// 邮件发送优先级权举表 79         /// </summary> 80         public enum Prioritys 81         { 82             /// <summary> 83             /// 最高级别 84             /// </summary> 85             HIGH = 1, 86             /// <summary> 87             /// 默认级别 88             /// </summary> 89             NORMAL = 3, 90             /// <summary> 91             /// 最低级别 92             /// </summary> 93             LOW = 5 94         } 95  96         /// <summary> 97         /// 构造函数 98         /// </summary> 99         public SckMail()100         {101             strErrMessage = "";102             strResponse = "";103         }104 105         #region "返回信息"106 107         /// <summary>108         /// SMTP服务器反馈的信息109         /// </summary>110         private string strResponse = "";111 112         /// <summary>113         /// 取得SMTP服务器反馈的信息114         /// </summary>115         public string ServerResponse116         {117             get118             {119                 return strResponse;120             }121         }122 123         /// <summary>124         /// 错误反馈信息125         /// </summary>126         private string strErrMessage = "";127 128         /// <summary>129         /// 取得错误反馈信息130         /// </summary>131         public string ErrorMessage132         {133             get134             {135                 return strErrMessage;136             }137         }138 139         /// <summary>140         /// 认证用户名141         /// </summary>142         private string strUsername = "";143 144         /// <summary>145         /// 认证用户名146         /// </summary>147         public string Username148         {149             get { return strUsername; }150             set { strUsername = value; }151         }152 153         /// <summary>154         /// 认证密码155         /// </summary>156         private string strPassword = "";157 158         /// <summary>159         /// 认证密码160         /// </summary>161         public string Password162         {163             get { return strPassword; }164             set { strPassword = value; }165         }166 167         #endregion168 169         #region "邮件属性"170 171         /// <summary>172         /// SMTP 邮件服务器173         /// </summary>174         private string _SmtpHost = "";175 176         /// <summary>177         /// SMTP 邮件服务器178         /// </summary>179         public string SmtpHost180         {181             get182             {183                 return _SmtpHost;184             }185             set186             {187                 _SmtpHost = value;188             }189         }190 191         /// <summary>192         /// SMTP邮件服务器端口193         /// </summary>194         private int _Port = 25;195 196         /// <summary>197         /// SMTP邮件服务器端口198         /// </summary>199         public int Port200         {201             get202             {203                 return _Port;204             }205             set206             {207                 _Port = value;208             }209         }210 211         #endregion212 213         /// <summary>214         /// Base64加密215         /// </summary>216         /// <param name="code">明文</param>217         /// <returns>密文</returns>218         public string MailBase64(string code)219         {220             string encode = "";221             try222             {223                 byte[] bytes = Encoding.GetEncoding(Encoding.Default.CodePage).GetBytes(code);224                 encode = Convert.ToBase64String(bytes);225             }226             catch (Exception ex)227             {228                 //utils.LastError = ex;229                 encode = code;230             }231             return encode;232         }233 234         /// <summary>235         /// Socket发送邮件236         /// </summary>237         /// <param name="strFrom">发送人 邮件地址</param>238         /// <param name="strDisplayFromName">发送人显示名</param>239         /// <param name="strTo">收件人 邮件地址</param>240         /// <param name="strDisplayToName">收件人显示名</param>241         /// <param name="clsPriority">邮件优先级</param>242         /// <param name="blnHtml">是否发送HTML邮件</param>243         /// <param name="strBase">发送来源(可以为空)</param>244         /// <param name="strMessage">发送内容</param>245         /// <param name="strSubject">邮件主题</param>246         public void SendMail(string strFrom, string strDisplayFromName, string strTo, string strDisplayToName,247             Prioritys clsPriority, bool blnHtml, string strBase, string strSubject, string strMessage)248         {249             string strResponseNumber = "";250             bool bolConnect = false;251             List<string> strSendBuffer = null;252             string[] strResponseCode = { "220", "235", "250", "251", "354", "334", "221" };   // success codes from SMTP server253 254             try255             {256                 strSendBuffer = new List<string>();257 258                 SMTPClient smtpcMail = new SMTPClient();259 260                 smtpcMail.Connect(_SmtpHost, _Port);261                 bolConnect = smtpcMail.isConnected();262 263                 //判断是否进行了连接264                 if (!bolConnect)265                 {266                     strErrMessage = "Smtp服务器连接失败...";267                     return;268                 }269 270                 //读取反馈信息271                 strResponseNumber = smtpcMail.GetServerResponse();272                 if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber, "220"))273                 {274                     this.strResponse += strResponseNumber;275                 }276                 else277                 {278                     this.strErrMessage = "连接失败:" + strResponseNumber;279                     return;280                 }281 282                 string strData = http://www.mamicode.com/"";283                 strData = http://www.mamicode.com/string.Concat("HELO ", _SmtpHost);284                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");285                 strSendBuffer.Add(strData);286 287                 strData = http://www.mamicode.com/"";288                 strData = http://www.mamicode.com/string.Concat(strData, "AUTH LOGIN");289                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");290                 strSendBuffer.Add(strData);291 292                 strData = http://www.mamicode.com/"";293                 strData = http://www.mamicode.com/string.Concat(strData, MailBase64(this.strUsername));294                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");295                 strSendBuffer.Add(strData);296 297                 strData = http://www.mamicode.com/"";298                 strData = http://www.mamicode.com/string.Concat(strData, MailBase64(this.strPassword));299                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");300                 strSendBuffer.Add(strData);301 302                 strData = http://www.mamicode.com/"";303                 strData = http://www.mamicode.com/string.Concat("MAIL FROM: ", "<" + strFrom + ">");304                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");305                 strSendBuffer.Add(strData);306 307                 strData = http://www.mamicode.com/"";308                 strData = http://www.mamicode.com/string.Concat("RCPT TO: ", "<" + strTo + ">");309                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");310                 strSendBuffer.Add(strData);311 312                 strData = http://www.mamicode.com/"";313                 strData = http://www.mamicode.com/string.Concat("DATA", "\r\n");314                 strSendBuffer.Add(strData);315 316                 strData = http://www.mamicode.com/"";317                 strData = http://www.mamicode.com/string.Concat("From: ", strDisplayFromName + "<" + strFrom + ">");318                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");319                 strData = http://www.mamicode.com/string.Concat(strData, "To: ");320                 strData = http://www.mamicode.com/string.Concat(strData, strDisplayToName + "<" + strTo + ">");321                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");322                 strData = http://www.mamicode.com/string.Concat(strData, "Subject: ");323                 strData = http://www.mamicode.com/string.Concat(strData, strSubject);324                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");325                 strData = http://www.mamicode.com/string.Concat(strData, "MIME-Version: 1.0");326                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");327                 strData = http://www.mamicode.com/string.Concat(strData, "X-Priority: " + clsPriority);328                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");329                 strData = http://www.mamicode.com/string.Concat(strData, "X-MSMail-Priority: " + clsPriority);330                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");331                 if (blnHtml == true)332                 {333                     strData = http://www.mamicode.com/string.Concat(strData, "Content-Type: text/html;");334                 }335                 else336                 {337                     strData = http://www.mamicode.com/string.Concat(strData, "Content-Type: text/plain;");338                 }339                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");340                 strData = http://www.mamicode.com/string.Concat(strData, "charset=\"iso-8859-1\"");341                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");342                 strData = http://www.mamicode.com/string.Concat(strData, "Content-Transfer-Encoding: base64");343                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n");344                 strData = http://www.mamicode.com/string.Concat(strData, "Content-Base: \"" + strBase + "\"");345                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n" + "\r\n");346 347                 strData = http://www.mamicode.com/string.Concat(strData, MailBase64(strMessage));348                 strData = http://www.mamicode.com/string.Concat(strData, "\r\n.\r\n");349                 strSendBuffer.Add(strData);350 351                 strData = http://www.mamicode.com/"";352                 strData = http://www.mamicode.com/string.Concat(strData, "QUIT\r\n");353                 strSendBuffer.Add(strData);354                 int i = 0;355 356                 while (i < strSendBuffer.Count)357                 {358                     smtpcMail.SendCommandToServer(strSendBuffer[i]);359                     strResponseNumber = smtpcMail.GetServerResponse();360 361                     for (int j = 0; j < strResponseCode.Length; j++)362                     {363                         if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber, strResponseCode[j]))364                         {365                             this.strResponse += strResponseNumber;366                             this.strResponse += "<br>";367                             break;368                         }369                         else370                         {371                             if (j == strResponseCode.Length - 1)372                             {373                                 this.strErrMessage += strResponseNumber;374                                 this.strErrMessage += strSendBuffer[i];375                                 return;376                             }377                         }378                     }379 380                     i++;381                 } // 结束循环382             }383             catch (SocketException err)384             {385                 this.strErrMessage += err.Message + " " + err.StackTrace;386                 throw (err);387             }388             catch (Exception e)389             {390                 this.strErrMessage += e.Message + " " + e.StackTrace;391                 throw (e);392             }393         }394 395     }396     #endregion397 398     #region SMTPMail399     public class SMTPMail400     {401         private string smtpServer;402         private string smtpUser;403         private string smtpPwd;404         private string userEmail;405         private string subject;406         private string body;407 408         private int serverPort = 25;    //默认为25409         private bool isHtml = false;         // 是否Html邮件410 411         //private string charset = "GB2312";  //设定语言代码,默认设定为GB2312,如不需要可设置为""412         //private string priority = "Normal";  //邮件发送优先级,可设置为"High","Normal","Low"413 414         /// <summary>415         /// 邮件服务器地址416         /// </summary>417         public string SmtpServer418         {419             get { return smtpServer; }420             set { smtpServer = value; }421         }422 423         /// <summary>424         /// 邮件服务器端口号425         /// </summary>    426         public int ServerPort427         {428             get { return serverPort; }429             set { serverPort = value; }430         }431 432         /// <summary>433         /// 是否Html邮件434         /// </summary>    435         public bool IsHtml436         {437             get { return isHtml; }438             set { isHtml = value; }439         }440 441         ///// <summary>442         ///// 代码443         ///// </summary>444         //public string Charset445         //{446         //    get { return charset; }447         //    set { charset = value; }448         //}449         ///// <summary>450         ///// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"451         ///// </summary>452         //public string Priority453         //{454         //    set455         //    {456         //        switch (value.ToLower())457         //        {458         //            case "high":459         //                priority = "High";460         //                break;461 462         //            case "1":463         //                priority = "High";464         //                break;465 466         //            case "normal":467         //                priority = "Normal";468         //                break;469 470         //            case "3":471         //                priority = "Normal";472         //                break;473 474         //            case "low":475         //                priority = "Low";476         //                break;477 478         //            case "5":479         //                priority = "Low";480         //                break;481 482         //            default:483         //                priority = "High";484         //                break;485         //        }486         //    }487         //}488 489 490 491         /// <summary>492         /// 邮件发送帐号493         /// </summary>494 495         public string SmtpUser496         {497             get { return smtpUser; }498             set { smtpUser = value; }499         }500 501         /// <summary>502         /// 邮件发送帐号密码503         /// </summary>504         public string SmtpPwd505         {506             get { return smtpPwd; }507             set { smtpPwd = value; }508         }509 510         /// <summary>511         /// 用户邮件地址,即是被发送人的邮件地址512         /// </summary>513         public string UserEmail514         {515             get { return userEmail; }516             set { userEmail = value; }517         }518 519         /// <summary>520         /// 邮件标题521         /// </summary>522         public string Subject523         {524             get { return subject; }525             set { subject = value; }526         }527 528         /// <summary>529         /// 邮件主体530         /// </summary>531         public string Body532         {533             get { return body; }534             set { body = value; }535         }536 537         /// <summary>538         /// 发送邮件539         /// </summary>540         /// <returns>bool</returns>541         public bool SendEmail()542         {543             try544             {545                 using (MailMessage mailMsg = new MailMessage(this.smtpUser, this.userEmail))546                 {547                     mailMsg.Subject = this.subject;548                     mailMsg.Body = this.body;549                     mailMsg.SubjectEncoding = Encoding.UTF8;550 551                     mailMsg.BodyEncoding = Encoding.UTF8;552                     mailMsg.IsBodyHtml = this.isHtml;553                     mailMsg.Priority = MailPriority.Normal;554 555                     SmtpClient smtpClient = new SmtpClient(this.smtpServer);556                     smtpClient.Port = this.serverPort;557                     smtpClient.UseDefaultCredentials = false;558                     smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;559                     smtpClient.Credentials = new NetworkCredential(this.smtpUser, this.smtpPwd);560                     smtpClient.Send(mailMsg);561 562 563                     return true;564                 }565 566             }567             catch (Exception ex)568             {569 570                 throw ex;571             }572         }573     }574     #endregion575 576     #region MailInfo577     public class MailInfo578     {579         /// <summary>580         /// 邮件服务器地址581         /// </summary>582         public string SmtpHost = string.Empty;583 584         /// <summary>585         /// 端口号586         /// </summary>587         public int Port = 25;588 589         /// <summary>590         /// 邮箱登录名591         /// </summary>592         public string UserName = string.Empty;593 594         /// <summary>595         /// 邮箱登录密码596         /// </summary>597         public string Password = string.Empty;598 599         /// <summary>600         /// 发送人邮件601         /// </summary>602         public string From = string.Empty;603 604         /// <summary>605         /// 发送人姓名606         /// </summary>607         public string FromName = string.Empty;608         /// <summary>609         /// 获取邮件配置信息610         /// </summary>611         /// <returns></returns>612         public MailInfo GetMailInfo()613         {614             var config = System.Web.Configuration.WebConfigurationManager.AppSettings;615             MailInfo model = new MailInfo();616             model.SmtpHost = config["SmtpHost"].Trim();617             try618             {619                 if (!int.TryParse(config["SmtpPort"], out model.Port))620                 {621                     model.Port = 25;622                 }623             }624             catch625             {626                 model.Port = 25;627             }628             model.UserName = config["EmailUserName"];629             model.Password = config["EmailPassword"];630             model.From = config["EmailFrom"];631             model.FromName = config["EmailFromName"];632             return model;633         }634         public static string SendMail(string email, string title, string content)635         {636            // bool IsSuccess = true;637             string mailContent = string.Empty;638             string mailinfo = string.Empty;639             SckMail mail = null;640             MailInfo mi =new MailInfo();641             try642             {643                 mail = new SckMail();644                 mi = mi.GetMailInfo();645                 mail.SmtpHost = mi.SmtpHost;646                 mail.Port = mi.Port;647                 mail.Username = mi.From;648                 mail.Password = mi.Password;649                 mailContent = content;650                 mail.SendMail651                 (652                     mi.From,653                     mi.FromName,654                     email,655                     email,656                     SckMail.Prioritys.NORMAL,657                     true,658                     "",659                     CheckStr(title),660                     mailContent661                 );662                 if (mail.ErrorMessage != "")663                 {664                     mailinfo = mail.ErrorMessage;665                 }666             }667             catch (Exception e)668             {669                 mailinfo = e.Message;670             }671             finally672             {673                 mail = null;674             }675             return mailinfo;676         }677         public static string CheckStr(object str)678         {679             string ret = "";680             try681             {682                 if (str == null) ret = "";683                 else684                 {685                     ret = str.ToString();686                     ret = ret.Replace("", "‘‘");687                 }688             }689             catch690             {691                 ret = "";692             }693             return ret;694         }695     } 696     #endregion697 }

 

C#通过拼接协议的方式来发送邮件类库