首页 > 代码库 > 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#通过拼接协议的方式来发送邮件类库
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。