本文共 13304 字,大约阅读时间需要 44 分钟。
www.chinacs.net 2002-5-9 中文C#技术站
邮件发送类,支持HTML格式,支持优先级设置。通过SOCKET类实现的 using System; using System.Text; using System.IO; using System.Net; using System.Net.Sockets;namespace Blood.Com.ClassLib
{ /// <summary>/// TcpClient派生类,用来进行SMTP服务器的连接工作/// </summary>public class SMTPClient : TcpClient{ public bool isConnected(){ return Active;}public void SendCommandToServer(string Command)
{ NetworkStream ns = this.GetStream() ;byte[] WriteBuffer ;WriteBuffer = new byte[1024] ;WriteBuffer = Encoding.Default.GetBytes(Command) ;ns.Write(WriteBuffer,0,WriteBuffer.Length);return ;} public string GetServerResponse(){ int StreamSize ;string ReturnValue = "" ;byte[] ReadBuffer ;NetworkStream ns = this.GetStream() ;ReadBuffer = new byte[1024] ;StreamSize = ns.Read(ReadBuffer,0,ReadBuffer.Length);if (StreamSize==0){ return ReturnValue ;}else{ ReturnValue = Encoding.Default.GetString(ReadBuffer);return ReturnValue;} }public bool DoesStringContainSMTPCode(string s,string SMTPCode)
{ return(s.IndexOf(SMTPCode,0,10)==-1)?false:true;}} //结束类
/// <summary>
/// 发送邮件类/// </summary>public class SMTPMail{ /// <summary>/// 错误反馈信息/// </summary>private string strErrMessage = null;/// <summary>
/// SMTP服务器反馈的信息/// </summary>private string strResponse;/// <summary>
/// 构造函数/// </summary>public SMTPMail(){ strErrMessage = "";strResponse = "";}/// <summary>
/// 取得错误反馈信息/// </summary>public string ErrorMessage{ get{ return strErrMessage ;}}/// <summary>
/// 取得SMTP服务器反馈的信息/// </summary>public string ServerResponse{ get{ return strResponse;}}/// <summary>
/// 邮件发送优先级/// </summary>public enum Prioritys{ /// <summary>/// 最高级别/// </summary>HIGH = 1,/// <summary>/// 默认级别/// </summary>NORMAL = 3,/// <summary>/// 最低级别/// </summary>LOW = 5}public void SendMail(string SmtpHost,int Port,string From,string DisplayFromName,string To,string DisplayToName,Prioritys Priority,bool Html,string Base,string Subject,string Message)
{ try{ string strResponseNumber;SMTPClient smtpcMail = new SMTPClient();smtpcMail.Connect(SmtpHost,Port);bool bolConnect = smtpcMail.isConnected();//判断是否进行了连接
if (!bolConnect){ strErrMessage = "Smtp服务器连接失败...";return;}//读取反馈信息
strResponseNumber = smtpcMail.GetServerResponse();if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,"220")){ this.strResponse += strResponseNumber;}else{ this.strErrMessage = "连接失败" + strResponseNumber;return ;}string[] strSendBuffer = new string[6];
string[] strResponseCode = {"220","250","251","354","221"}; // success codes from SMTP serverstring strData = "";
strData = string.Concat("HELO ",SmtpHost);strData = string.Concat(strData,"/r/n");strSendBuffer[0] = strData ;strData = "";
strData = string.Concat("MAIL FROM: ","<" + From + ">");strData = string.Concat(strData,"/r/n");strSendBuffer[1] = strData;strData = "";
strData = string.Concat("RCPT TO: ","<" + To + ">");strData = string.Concat(strData,"/r/n");strSendBuffer[2] = strData;strData = "" ;
strData = string.Concat("DATA","/r/n");strSendBuffer[3] = strData ;strData = "" ;
strData = string.Concat("From: ",DisplayFromName + "<" + From + ">");strData = string.Concat(strData,"/r/n" );strData = string.Concat(strData,"To: " );strData = string.Concat(strData,DisplayToName + "<" + To + ">");strData = string.Concat(strData,"/r/n" );strData = string.Concat(strData,"Subject: " );strData = string.Concat(strData,Subject);strData = string.Concat(strData,"/r/n");strData = string.Concat(strData,"MIME-Version: 1.0" );strData = string.Concat(strData,"/r/n");strData = string.Concat(strData,"X-Priority: " + Priority);strData = string.Concat(strData,"/r/n");strData = string.Concat(strData,"X-MSMail-Priority: " + Priority);strData = string.Concat(strData,"/r/n");if(Html == true){ strData = string.Concat(strData,"Content-Type: text/html;" );}else{ strData = string.Concat(strData,"Content-Type: text/plain;" );}strData = string.Concat(strData,"/r/n");strData = string.Concat(strData,"charset=/"iso-8859-1/"" );strData = string.Concat(strData,"/r/n");if(Html == true){ strData = string.Concat(strData,"Content-Transfer-Encoding: text/html;" );}else{ strData = string.Concat(strData,"Content-Transfer-Encoding: text/plain;" );}strData = string.Concat(strData,"/r/n");strData = string.Concat(strData,"Content-Base: /"" + Base + "/"" );strData = string.Concat(strData,"/r/n" + "/r/n");strData = string.Concat(strData,Message);
strData = string.Concat(strData,"/r/n./r/n");strSendBuffer[4] = strData;strData = "" ;
strData = string.Concat(strData,"QUIT/r/n");strSendBuffer[5] = strData;int i = 0 ;
while(i < strSendBuffer.Length)
{ smtpcMail.SendCommandToServer(strSendBuffer[i]);strResponseNumber = smtpcMail.GetServerResponse();for(int j=0;j<strResponseCode.Length;j++)
{ if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,strResponseCode[j])){ this.strResponse += strResponseNumber;this.strResponse += "<br>";break;}else{ if(j==strResponseCode.Length-1){ this.strErrMessage += strResponseNumber;this.strErrMessage += strSendBuffer[i];return;}}}i++ ;
} // 结束循环}catch(SocketException err){ this.strErrMessage += err.Message + " " + err.StackTrace;}catch(Exception e){ this.strErrMessage += e.Message + " " + e.StackTrace;}} //结束邮件发送方法} // 结束类
} // 结束Namespace
邮件发送前台页面 <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Test.SendMailSample" %><HTML><HEAD><title>邮件发送例子</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style type="text/css">TD { FONT-SIZE: 9pt; FONT-FAMILY: "宋体"}.TextBox { BORDER-RIGHT: #000000 thin dashed; BORDER-TOP: #000000 thin dashed; BORDER-LEFT: #000000 thin dashed; BORDER-BOTTOM: #000000 thin dashed}</style></HEAD><body text="#000000" bgColor="#ffffff"><form runat="server"><table style="BORDER-COLLAPSE: collapse" borderColor="#111111" cellSpacing="0" cellPadding="3" width="500" align="center" border="1"><tr><td align="middle" colSpan="2">邮件发送例子(SOCKET类)</td></tr><asp:panel id="pelMessage" Visible="False" Runat="server"><TR><TD align="middle" colSpan="2"><asp:Label id="lblMessage" runat="server"></asp:Label></TD></TR></asp:panel><tr><td align="right" width="150">SMTP服务器:</td><td width="350"><asp:textbox id="txtSmtpHost" runat="server" CssClass="TextBox" MaxLength="50"></asp:textbox><asp:requiredfieldvalidator id="rfvSmtpHost" runat="server" ErrorMessage="*" ControlToValidate="txtSmtpHost" Display="Dynamic"></asp:requiredfieldvalidator></td></tr><tr><td align="right" width="150">SMTP服务器端口:</td><td width="350"><asp:textbox id="txtPort" runat="server" CssClass="TextBox" MaxLength="6"></asp:textbox><asp:requiredfieldvalidator id="rfvPort" runat="server" ErrorMessage="*" ControlToValidate="txtPort" Display="Dynamic"></asp:requiredfieldvalidator><asp:regularexpressionvalidator id="revPort" runat="server" ErrorMessage="只能输入数字" ValidationExpression="/d{1,}" ControlToValidate="txtPort" Display="Dynamic"></asp:regularexpressionvalidator></td></tr><tr><td align="right" width="150">邮件发送者:</td><td width="350"><asp:textbox id="txtFrom" runat="server" CssClass="TextBox" MaxLength="50"></asp:textbox><asp:requiredfieldvalidator id="rfvFrom" runat="server" ErrorMessage="*" ControlToValidate="txtFrom" Display="Dynamic"></asp:requiredfieldvalidator><asp:regularexpressionvalidator id="revFrom" runat="server" ErrorMessage="邮件格式错误" ValidationExpression="/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*" ControlToValidate="txtFrom" Display="Dynamic"></asp:regularexpressionvalidator></td></tr><tr><td align="right" width="150">发送者显示名称:</td><td width="350"><asp:textbox id="txtFromName" runat="server" CssClass="TextBox" MaxLength="20"></asp:textbox></td></tr><tr><td align="right" width="150">邮件接收者:</td><td width="350"><asp:textbox id="txtTo" runat="server" CssClass="TextBox" MaxLength="50"></asp:textbox><asp:requiredfieldvalidator id="rfvTo" runat="server" ErrorMessage="*" ControlToValidate="txtTo" Display="Dynamic"></asp:requiredfieldvalidator><asp:regularexpressionvalidator id="revTo" runat="server" ErrorMessage="邮件格式错误" ValidationExpression="/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*" ControlToValidate="txtTo" Display="Dynamic"></asp:regularexpressionvalidator></td></tr><tr><td align="right" width="150">接收者显示名称:</td><td width="350"><asp:textbox id="txtToName" runat="server" CssClass="TextBox" MaxLength="20"></asp:textbox></td></tr><tr><td align="right" width="150">邮件发送优先级:</td><td width="350"><asp:dropdownlist id="ddlPriority" runat="server"><asp:ListItem Value="高">高</asp:ListItem><asp:ListItem Value="默认" Selected="True">默认</asp:ListItem><asp:ListItem Value="低">低</asp:ListItem></asp:dropdownlist></td></tr><tr><td align="right" width="150">发送HTML格式的邮件:</td><td width="350"><asp:dropdownlist id="ddlHtml" runat="server"><asp:ListItem Value="是" Selected="True">是</asp:ListItem><asp:ListItem Value="否">否</asp:ListItem></asp:dropdownlist></td></tr><tr><td align="right" width="150">邮件主题:</td><td width="350"><asp:textbox id="txtSubject" runat="server" CssClass="TextBox" MaxLength="50"></asp:textbox><asp:RequiredFieldValidator id="rfvSubject" runat="server" ErrorMessage="*" ControlToValidate="txtSubject" Display="Dynamic"></asp:RequiredFieldValidator></td></tr><tr><td align="right" width="150">邮件内容:</td><td width="350"><asp:textbox id="txtMessage" runat="server" Rows="15" TextMode="MultiLine" CssClass="TextBox" Columns="40"></asp:textbox><asp:RequiredFieldValidator id="rfvMessage" runat="server" ErrorMessage="*" ControlToValidate="txtMessage" Display="Dynamic"></asp:RequiredFieldValidator></td></tr><tr align="middle"><td colSpan="2"><asp:Button id="btnSendMail" runat="server" Text="发送邮件" CssClass="TextBox" BackColor="Silver" ForeColor="Blue"></asp:Button></td></tr></table></form></body></HTML> 邮件发送Codebehindusing System;
using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Blood.Com.ClassLib;namespace Test
{ /// <summary>/// 邮件发送例子/// </summary>public class SendMailSample : System.Web.UI.Page{ protected System.Web.UI.WebControls.DataGrid DataGrid1;protected System.Web.UI.WebControls.DropDownList ddlPriority;protected System.Web.UI.WebControls.DropDownList ddlHtml;protected System.Web.UI.WebControls.TextBox txtSmtpHost;protected System.Web.UI.WebControls.TextBox txtPort;protected System.Web.UI.WebControls.TextBox txtFrom;protected System.Web.UI.WebControls.TextBox txtFromName;protected System.Web.UI.WebControls.TextBox txtTo;protected System.Web.UI.WebControls.TextBox txtToName;protected System.Web.UI.WebControls.TextBox txtSubject;protected System.Web.UI.WebControls.TextBox txtMessage;protected System.Web.UI.WebControls.RegularExpressionValidator revPort;protected System.Web.UI.WebControls.RequiredFieldValidator rfvSmtpHost;protected System.Web.UI.WebControls.RequiredFieldValidator rfvPort;protected System.Web.UI.WebControls.RequiredFieldValidator rfvFrom;protected System.Web.UI.WebControls.RequiredFieldValidator rfvTo;protected System.Web.UI.WebControls.RequiredFieldValidator rfvSubject;protected System.Web.UI.WebControls.RequiredFieldValidator rfvMessage;protected System.Web.UI.WebControls.Button btnSendMail;protected System.Web.UI.WebControls.Label lblMessage;protected System.Web.UI.WebControls.RegularExpressionValidator revFrom;protected System.Web.UI.WebControls.RegularExpressionValidator revTo;protected System.Web.UI.WebControls.Panel pelMessage;private void Page_Load(object sender, System.EventArgs e)
{ }#region Web Form Designer generated code
override protected void OnInit(EventArgs e){ //// CODEGEN: This call is required by the ASP.NET Web Form Designer.//InitializeComponent();base.OnInit(e);}/// <summary>
/// Required method for Designer support - do not modify/// the contents of this method with the code editor./// </summary>private void InitializeComponent(){ this.btnSendMail.Click += new System.EventHandler(this.btnSendMail_Click);this.Load += new System.EventHandler(this.Page_Load);}
#endregionprivate void btnSendMail_Click(object sender, System.EventArgs e)
{ if(IsPostBack){ SMTPMail clsMail = new SMTPMail();string strSmtpHost = txtSmtpHost.Text;int intPort = Int32.Parse(txtPort.Text);string strFrom = txtFrom.Text;string strFromName = txtFromName.Text;string strTo = txtTo.Text;string strToName = txtToName.Text;SMTPMail.Prioritys Priority = SMTPMail.Prioritys.NORMAL;bool bolHtml;string strSubject = txtSubject.Text;string strMessage = txtMessage.Text;if(ddlPriority.SelectedItem.Text == "默认"){ Priority = SMTPMail.Prioritys.NORMAL;}else if(ddlPriority.SelectedItem.Text == "高"){ Priority = SMTPMail.Prioritys.HIGH;}else if(ddlPriority.SelectedItem.Text == "低"){ Priority = SMTPMail.Prioritys.LOW;}if(ddlHtml.SelectedItem.Text == "是"){ bolHtml = true;}else{ bolHtml = false;}clsMail.SendMail(strSmtpHost,intPort,strFrom,strFromName,strTo,strToName,Priority,bolHtml,"",strSubject,strMessage);if(clsMail.ErrorMessage !=""){ pelMessage.Visible = true;lblMessage.Text = clsMail.ErrorMessage;lblMessage.ForeColor = System.Drawing.Color.Red;}else{ pelMessage.Visible = true;lblMessage.Text = "邮件发送成功";lblMessage.ForeColor = System.Drawing.Color.Blue;}}}}}
转载地址:https://linuxstyle.blog.csdn.net/article/details/155161 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!