创建基于ASP.NET的SMTP邮件服务
2008-04-24 05:55
183 查看
ASP.NET在System.Web.Mail名称空间中有一个发送email的内建类,但这仅是cdosys的一个假象。开发者能使用一个替代的它SMTP邮件服务。在这篇文章里面,我将会展示如何创建一个用于ASP.NET的功能齐全的SMTP邮件服务。
首先,我们创建一个继承命名空间System.NET.Sockets的TcpClient类的类。TcpClient类提供简单的方法用于连接,发送,接收网络的数据流。GetStream方法用于创建一个网络流(NETworkStream)。读和写网络流(NETworkStream)的方法用于发送数据给远程主机和从远程主机接收网络流。
public class ClientConnection : TcpClient
{
private NETworkStream _NETworkStream = null;
private StreamReader _StreamReader = null;
private StreamWriter _StreamWriter = null;
public void Initialise()
{
_NETworkStream = this.GetStream();
_StreamReader = new StreamReader(_NETworkStream,
System.Text.Encoding.Default, false, this.ReceiveBufferSize);
_StreamWriter = new StreamWriter(_NETworkStream,
System.Text.Encoding.Default, this.SendBufferSize);
}
public void Send(string s)
{
_StreamWriter.WriteLine(s);
_StreamWriter.Flush();
}
public string Read()
{
return _StreamReader.ReadLine();
}
}
接下来,我们创建发送邮件出去的类,这个类有几个属性去设置关于被发送的邮件的一些信息。
public string MailServer = "127.0.0.1" ;
public string From = "" ;
public string To = "" ;
public string Body = "" ;
public string Subject = "" ;
和一个发送邮件的方法。这个方法将会用服务器名和它的端口去创建一个连接。指令可以被发送到远程主机。
public void Send()
{
tcp = new ClientConnection();
tcp.Connect(MailServer,25);
tcp.Initialise();
SendCommandToServer("HELO " System.NET.Dns.GetHostName());
SendCommandToServer("MAIL FROM: " From "/r/n");
SendCommandToServer("RCPT TO: " To "/r/n");
string StrHeaders = "";
StrHeaders = "From: " From "/r/n";
StrHeaders = "To: " To "/r/n";
StrHeaders = "Subject: " Subject "/r/n";
StrHeaders = "Content-type: text/plain; charset=/"ISO-8859-1/"" "/r/n";
SendCommandToServer("DATA/r/n" StrHeaders);
SendCommandToServer(Body "/r/n./r/n");
SendCommandToServer("QUIT/r/n");
}
还有一个私有的送一个指令到本地服务器的方法。
private void SendCommandToServer(string cmd)
{
tcp.Send(cmd);
Response=tcp.Read();
System.Web.HttpContext.Current.Trace.Warn("Response",Response);
}
现在,这个类基本完成了。开发者还可以建立错误回执和释放资源(用TcpClient类中的Close()方法)。同样,这几个属性可以被扩展到在邮件中包含更多的信息。
最后,我们可以在ASPx文件中写一些发送邮件的代码。在这个例子中,"localhost"是邮件服务器。你可以根据情况改变这个,或者可以看我的关于如何设置你的发送邮件的本地服务器的文章。
<%@ Import Namespace="MyComponents" %>
<script runat="server">
protected void Page_Load(Object Src, EventArgs E)
{
if (IsPostBack)
{
Mail Mailer=new Mail();
Mailer.From=From.Text;
Mailer.To=To.Text;
Mailer.Subject=Subject.Text;
Mailer.Body=Body.Text;
Mailer.MailServer="localhost";
Mailer.Send();
}
}
</script>
下面是完整的代码。
using System.IO;
using System.NET.Sockets;
namespace MyComponents
{
public class ClientConnection : TcpClient
{
private NETworkStream _NETworkStream = null;
private StreamReader _StreamReader = null;
private StreamWriter _StreamWriter = null;
public void Initialise()
{
_NETworkStream = this.GetStream();
_StreamReader = new StreamReader(_NETworkStream,
System.Text.Encoding.Default, false, this.ReceiveBufferSize);
_StreamWriter = new StreamWriter(_NETworkStream,
System.Text.Encoding.Default, this.SendBufferSize);
}
public void Send(string s)
{
_StreamWriter.WriteLine(s);
_StreamWriter.Flush();
}
public string Read()
{
return _StreamReader.ReadLine();
}
}
public class Mail
{
public string MailServer = "127.0.0.1" ;
public string From = "" ;
public string To = "" ;
public string Body = "" ;
public string Subject = "" ;
private ClientConnection tcp=null;
private string Response="";
public void Send()
{
tcp = new ClientConnection();
tcp.Connect(MailServer,25);
tcp.Initialise();
SendCommandToServer("HELO " System.NET.Dns.GetHostName());
SendCommandToServer("MAIL FROM: " From "/r/n");
SendCommandToServer("RCPT TO: " To "/r/n");
string StrHeaders = "";
StrHeaders = "From: " From "/r/n";
StrHeaders = "To: " To "/r/n";
StrHeaders = "Subject: " Subject "/r/n";
StrHeaders = "Content-type: text/plain; charset=/"ISO-8859-1/"" "/r/n";
SendCommandToServer("DATA/r/n" StrHeaders);
SendCommandToServer(Body "/r/n./r/n");
SendCommandToServer("QUIT/r/n");
}
private void SendCommandToServer(string cmd)
{
tcp.Send(cmd);
Response=tcp.Read();
System.Web.HttpContext.Current.Trace.Warn("Response",Response);
}
}
}
首先,我们创建一个继承命名空间System.NET.Sockets的TcpClient类的类。TcpClient类提供简单的方法用于连接,发送,接收网络的数据流。GetStream方法用于创建一个网络流(NETworkStream)。读和写网络流(NETworkStream)的方法用于发送数据给远程主机和从远程主机接收网络流。
public class ClientConnection : TcpClient
{
private NETworkStream _NETworkStream = null;
private StreamReader _StreamReader = null;
private StreamWriter _StreamWriter = null;
public void Initialise()
{
_NETworkStream = this.GetStream();
_StreamReader = new StreamReader(_NETworkStream,
System.Text.Encoding.Default, false, this.ReceiveBufferSize);
_StreamWriter = new StreamWriter(_NETworkStream,
System.Text.Encoding.Default, this.SendBufferSize);
}
public void Send(string s)
{
_StreamWriter.WriteLine(s);
_StreamWriter.Flush();
}
public string Read()
{
return _StreamReader.ReadLine();
}
}
接下来,我们创建发送邮件出去的类,这个类有几个属性去设置关于被发送的邮件的一些信息。
public string MailServer = "127.0.0.1" ;
public string From = "" ;
public string To = "" ;
public string Body = "" ;
public string Subject = "" ;
和一个发送邮件的方法。这个方法将会用服务器名和它的端口去创建一个连接。指令可以被发送到远程主机。
public void Send()
{
tcp = new ClientConnection();
tcp.Connect(MailServer,25);
tcp.Initialise();
SendCommandToServer("HELO " System.NET.Dns.GetHostName());
SendCommandToServer("MAIL FROM: " From "/r/n");
SendCommandToServer("RCPT TO: " To "/r/n");
string StrHeaders = "";
StrHeaders = "From: " From "/r/n";
StrHeaders = "To: " To "/r/n";
StrHeaders = "Subject: " Subject "/r/n";
StrHeaders = "Content-type: text/plain; charset=/"ISO-8859-1/"" "/r/n";
SendCommandToServer("DATA/r/n" StrHeaders);
SendCommandToServer(Body "/r/n./r/n");
SendCommandToServer("QUIT/r/n");
}
还有一个私有的送一个指令到本地服务器的方法。
private void SendCommandToServer(string cmd)
{
tcp.Send(cmd);
Response=tcp.Read();
System.Web.HttpContext.Current.Trace.Warn("Response",Response);
}
现在,这个类基本完成了。开发者还可以建立错误回执和释放资源(用TcpClient类中的Close()方法)。同样,这几个属性可以被扩展到在邮件中包含更多的信息。
最后,我们可以在ASPx文件中写一些发送邮件的代码。在这个例子中,"localhost"是邮件服务器。你可以根据情况改变这个,或者可以看我的关于如何设置你的发送邮件的本地服务器的文章。
<%@ Import Namespace="MyComponents" %>
<script runat="server">
protected void Page_Load(Object Src, EventArgs E)
{
if (IsPostBack)
{
Mail Mailer=new Mail();
Mailer.From=From.Text;
Mailer.To=To.Text;
Mailer.Subject=Subject.Text;
Mailer.Body=Body.Text;
Mailer.MailServer="localhost";
Mailer.Send();
}
}
</script>
下面是完整的代码。
using System.IO;
using System.NET.Sockets;
namespace MyComponents
{
public class ClientConnection : TcpClient
{
private NETworkStream _NETworkStream = null;
private StreamReader _StreamReader = null;
private StreamWriter _StreamWriter = null;
public void Initialise()
{
_NETworkStream = this.GetStream();
_StreamReader = new StreamReader(_NETworkStream,
System.Text.Encoding.Default, false, this.ReceiveBufferSize);
_StreamWriter = new StreamWriter(_NETworkStream,
System.Text.Encoding.Default, this.SendBufferSize);
}
public void Send(string s)
{
_StreamWriter.WriteLine(s);
_StreamWriter.Flush();
}
public string Read()
{
return _StreamReader.ReadLine();
}
}
public class Mail
{
public string MailServer = "127.0.0.1" ;
public string From = "" ;
public string To = "" ;
public string Body = "" ;
public string Subject = "" ;
private ClientConnection tcp=null;
private string Response="";
public void Send()
{
tcp = new ClientConnection();
tcp.Connect(MailServer,25);
tcp.Initialise();
SendCommandToServer("HELO " System.NET.Dns.GetHostName());
SendCommandToServer("MAIL FROM: " From "/r/n");
SendCommandToServer("RCPT TO: " To "/r/n");
string StrHeaders = "";
StrHeaders = "From: " From "/r/n";
StrHeaders = "To: " To "/r/n";
StrHeaders = "Subject: " Subject "/r/n";
StrHeaders = "Content-type: text/plain; charset=/"ISO-8859-1/"" "/r/n";
SendCommandToServer("DATA/r/n" StrHeaders);
SendCommandToServer(Body "/r/n./r/n");
SendCommandToServer("QUIT/r/n");
}
private void SendCommandToServer(string cmd)
{
tcp.Send(cmd);
Response=tcp.Read();
System.Web.HttpContext.Current.Trace.Warn("Response",Response);
}
}
}
相关文章推荐
- [转贴]创建基于ASP.NET的SMTP邮件服务
- 创建基于ASP.NET的SMTP邮件服务
- 创建基于ASP.NET的SMTP邮件服务的具体方法
- 创建基于ASP.NET的SMTP邮件服务的具体方法
- 创建基于ASP.NET的SMTP邮件服务
- 创建基于ASP.NET的SMTP邮件系统
- 创建基于ASP.NET的SMTP邮件系统
- 创建基于ASP.NET的SMTP邮件系统
- 每日学习总结:CSS:Clear属性的用法、重复交易提示框、弹出提示框后页面变形、asp.net调用smtp服务发送邮件问题
- 每日学习总结:CSS:Clear属性的用法、重复交易提示框、弹出提示框后页面变形、asp.net调用smtp服务发送邮件问题
- asp.net 2.0 无SMTP服务也能发送邮件
- ASP.NET的SMTP邮件服务编程总结
- 使用 ASP.NET 创建的 XML Web 服务的概述
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
- 编写一个基于Provider的ASP.NET跟踪服务 (转贴)
- MattPowell介绍了如何在服务器端使用异步Web方法,来创建高性能的 Microsoft ASP.NET Web 服务
- 基于asp.net的web页面动态控件创建以及使用
- 基于ASP.NET的Web动态控件创建
- 使用ASP.NET创建WEBSERVICE服务
- 使用ASP.NET web API创建REST服务(二)