选择显示字体大小

创建基于asp.net的smtp邮件服务


  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=&quot;mycomponents&quot; %>
<script runat=&quot;server&quot;>
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=&quot;localhost&quot;;
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 = &quot;127.0.0.1&quot; ;
public string from = &quot;&quot; ;
public string to = &quot;&quot; ;
public string body = &quot;&quot; ;
public string subject = &quot;&quot; ;
private clientconnection tcp=null;
private string response=&quot;&quot;;
public void send()
{
tcp = new clientconnection();
tcp.connect(mailserver,25);
tcp.initialise();
sendcommandtoserver(&quot;helo &quot; + system.net.dns.gethostname());
sendcommandtoserver(&quot;mail from: &quot; + from + &quot;\r\n&quot;);
sendcommandtoserver(&quot;rcpt to: &quot; + to + &quot;\r\n&quot;);
string strheaders = &quot;&quot;;
strheaders += &quot;from: &quot; + from + &quot;\r\n&quot;;
strheaders += &quot;to: &quot; + to + &quot;\r\n&quot;;
strheaders += &quot;subject: &quot; + subject + &quot;\r\n&quot;;
strheaders += &quot;content-type: text/plain; charset=\&quot;iso-8859-1\&quot;&quot; + &quot;\r\n&quot;;
sendcommandtoserver(&quot;data\r\n&quot; + strheaders);
sendcommandtoserver(body + &quot;\r\n.\r\n&quot;);
sendcommandtoserver(&quot;quit\r\n&quot;);
}
private void sendcommandtoserver(string cmd)
{
tcp.send(cmd);
response=tcp.read();
system.web.httpcontext.current.trace.warn(&quot;response&quot;,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   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons