动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   .Net → 阅读文章

 创建基于ASP.NET的SMTP邮件服务

作者来源: 
阅读 1402 人次 , 2006-3-29 4:33:00 


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

 本文Tags邮件  C#  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:用ASP.NET和XML做的新闻系统
· 下一篇:ASP.NET结合COM组件发送Email
· 控件的拖动和缩放技术全解
· 用ASP.NET建立一个在线RSS新闻聚合器
· 在ASP+中访问数据库
· ADO.NET2.0的十大新特性
· .NET Framework 概要


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077