前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >邮件发送类,支持HTML格式,支持优先级设置

邮件发送类,支持HTML格式,支持优先级设置

作者头像
Java架构师必看
发布2021-03-22 11:56:04
1.7K0
发布2021-03-22 11:56:04
举报
文章被收录于专栏:Java架构师必看
代码语言:javascript
复制
    邮件发送类,支持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 server
 string 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>
 邮件发送Codebehind
 using 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);
 }
 #endregion
 private 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;
 }
 }
 }
 }
 }

本文由来源 22,由 javajgs_com 整理编辑,其版权均为 22 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档