转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
用c#創建用於asp.net的smtp郵件服務         ★★★★

用c#創建用於asp.net的smtp郵件服務

作者:闵涛 文章来源:闵涛的学习笔记 点击数:596 更新时间:2009/4/23 10:49:18

創建用於asp.net的smtp郵件服務


Asp.net在System.Web.Mail命名空間中有一個發送email的內建類,這僅是cdosys的一個包裝。開發者可能希望使用一個替代的它smtp郵件服務。在這篇文章裡面,我將會展示如何創建一個用於asp.net的功能齊全的smtp郵件服務。(僅僅是70行的c#語句)
首選,我們創建一個繼承命名空間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);
  }
 }
}
 

 


[C语言系列]NET 中C#的switch语句的语法  [网络技术]POP3、SMTP分别指什么?
[系统软件]托拽Explore中的文件到VB.net的窗口  [系统软件]Boost库在XP+Visual C++.net中的安装
[常用软件]新配色面板:Paint.Net3.0RC1官方下载  [常用软件]用内建的“Net Meeting”聊天
[VB.NET程序]Henry的VB.NET之旅(三)—共享成员  [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构
[VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体  [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台