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);
}
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器