中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> .NET编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· 通过探测邮件服务器...
· [图文] 邮件服务器IMail教程...
· [图文] 用MDaemon搭建邮件服...
· 用MDaemon搭建邮件服...
· 用MDaemon搭建邮件服...
· 用Win 2003架设邮件...
· [图文] 三分钟打造反垃圾邮...
· 在Fedora上建立自己...
· 在Fedora上建立自己...
· 在Fedora上建立自己...
创建基于ASP.NET的SMTP邮件服务
作者:不详  来源:不详  发布时间:2006-8-14 9:48:45  发布人:chinazhan

 减小字体 增大字体

    
    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);
  }
  }
  }
  
  
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
上一篇文章:ASP.Net+XML打造留言薄
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .