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 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;
}
}
}
}
}

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

  1. 邮件发送类,支持Gmail

    邮件发送类,支持Gmail,使用简单方便 using System; using System.Collections.Generic; using System.Text; using System ...

  2. 邮件发送类_SpringBoot优雅地发送邮件

    在小明经历的多个项目开发中,总会遇到消息通知的场景,比如某个广告主提交一个表单,我们要通知提醒运营人员及时查看. 消息通知的形式也有很多,比如:短信.邮件.app推送等,本文主要给大家描述一下邮件通知 ...

  3. 邮件发送类_10 分钟实现 Spring Boot 发生邮件功能

    基础知识 什么是SMTP? 什么是IMAP? 什么是POP3? IMAP和POP3协议有什么不同呢? 进阶知识 什么是JavaMailSender和JavaMailSenderImpl? 如何通过Ja ...

  4. 编译好的GDAL库,支持ECW格式,支持proj,支持geos

    这几天因为工作需要,把GDAL重新编译了一下,现支持ECW格式,即可以用GDALOPEN读取JPEG2000格式的影像数据;编译时也添加了对geos和proj的支持. 内含3个文件夹,分别是gdal, ...

  5. 测试视频软件支持的格式,你的手机支持什么格式?支持什么视频编辑器,如何检测视频信息...

    有时候转换了视频放到手机或psp,ipod等移动设备上不能播放,提示非法格式,这是什么原因呢?一般是因为你转换的参数与你手机支持的参数不配.那应该怎么解决呢?首先还得清楚手机支持的参数,这里提供一款工 ...

  6. mimemessage类是什么_邮件发送类

    [java]代码库import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activat ...

  7. 关于 PHPMailer 邮件发送类的使用心得(含多文件上传)

    This is important for send mail PHPMailer 核心文件 class.phpmailer.php class.phpmaileroauth.php class.ph ...

  8. 用html做一个发送邮件验证,邮件发送还有问题吗?送大家一个写好的类吧,支持stmp认证、HTML格式邮件-PHP教程,PHP应用...

    c_smtp_client.php /* smtp client class */ class c_smtp_client { var $connection; var $server; var $e ...

  9. 【Thinkphp 5】 整合邮箱类 phpmailer实现邮件发送

    第一步:下载phpmailer文件,主要用到的文件只有箭头指向的两个,thinkphp5中,把class.phpmailer.php改成了phpmailer.php 第二步: 将phpmailer文件 ...

最新文章

  1. 刷手支付已来,亚马逊技术专利曝光,不侵犯隐私、秒速支付
  2. Javascript用递归的方式遍历json数组
  3. 工控攻防演示——从外网到内网控制系统设备的入侵
  4. 错误 Failed to load module “canberra-gtk-module“ 解决方案
  5. jvm内置锁synchronized不能被中断
  6. 一文说通Blazor for Server-Side的项目结构
  7. 什么样的研究有价值?
  8. “发明在商业上获得成功”对专利法22条第三款有关创造性规定的影响
  9. php sqlsrv 分页,sqlsrv php分页
  10. 蓝桥杯2019年第十届C/C++省赛C组第一题-求和
  11. Python 基础数据类型
  12. Kerloud UAV室内光流定位教程
  13. 微信公众号支付java_微信公众号支付开发全过程(java版)
  14. 阿铭Linux_网站维护学习笔记20190227
  15. 【转】什么是Online Learning
  16. MATLAB将.mat矩阵写成.tif图片
  17. xmlDocument是什么?(转)
  18. git:remote: [session-f044bfa6] well: Incorrect username or password (access token)
  19. [转]int转string string转int
  20. Mybatis最入门---分页查询(逻辑分页与SQL语句分页)

热门文章

  1. lucene.net mysql_用Lucene[1].net对数据库建立索引及搜索+
  2. 楚留香手游系统互通的服务器,楚留香手游互通服务器汇总 哪些服能一起玩
  3. 使用Python,dlib,OpenCV在实时的视频流中进行面部标志检测
  4. 和12岁小同志搞创客开发:拿到一款控制器,要怎么分析?
  5. tensorflow object_detect 操作步骤
  6. 【seaborn】(1) 数据可视化,绘图风格、布局
  7. 探测参考信号(Sounding Reference Signal)
  8. Rocksdb 的 BlobDB key-value 分离存储插件
  9. Linux进程管理: 多进程编程
  10. 工厂方法模式和抽象工厂模式