使用C# 创建邮件发送组件(SMTP)

来源:网络整理 责任编辑:栏目编辑 发表时间:2013-07-02 06:12 点击:
     邮件发送在web应用中是屡见不鲜的,在asp时代大家多是利用一些第三方提供的组件如JMAIL、ASPMAIL等进行邮件发送。自从微软推出Asp.net后,很多程序员开始转向采用C#作为主要的开发语言。asp.net提供了更加强大的功能,同时也提供给了大家一个SMTP类作为邮件发送之用。但是,随着垃圾邮件的广泛传播,很多邮件服务提供商纷纷增加了SMTP 的认证手续,也就是ESMTP,而微软提供的SMTP类居然不支持认证发送。当然现在网上也出现了一些解决方案,利用其他的一些手段来发出认证信息。但我想,是不是还有更好的呢?为了解决这个问题,笔者两日茶饭不思,日以继夜,终于找到了一个方法:)。下面,我们将利用TCPCLIENT这个类直接与SMTP服务器通讯进行邮件的发送。
  
  
  实际上原理也就是利用套接字(Socket)和服务器进行对话通讯,按照SMTP协议的规范,和服务器建立联系。我们以往用的一些邮件组件都是这么做的。
  
  
  在开始之前,我们要对SMTP协议及其扩展ESMTP有个初步的了解。
  
  
  SMTP和ESMTP的一些主要命令格式有以下一些:
  
  
  HELO <信息发送端的名称> 例如:HELO Localhost
  
  
  这相当于和服务器打个招呼,你好,我是某某
  
  
  EHLO <信息发送端的名称> 例如:EHLO Localhost
  
  
  这是针对ESMTP服务器的接触方式,必须输入这个命令,系统才会开始认证程序
  
  
  AUTH LOGIN
  
  
  输入这个命令,系统的认证程序将会启动,同时系统会返回一个经过Base64处理过的字符串,意思是"请输入用户名"。接着必须发送用户名给服务器,用户名也必须经过Base64编码转换,服务器在通过用户名的认证之后会要求输入密码,此时输入经过Base64编码转换后的密码。成功后,即可运行下面的命令了。
  
  
  MAIL FROM:<发件人地址> 例如:MAIL FROM: webmaster@sina.com
  
  
  这是告诉服务器发件人的邮件地址
  
  
  RCPT TO:<收件人地址> 例如:RCPT TO: webmaster@sina.com
  
  
  这是告诉服务器收件人的邮件地址
  
  
  DATA
  
  
  输入这个命令后,服务器正式开始接受数据
  
  
  .
  
  
  数据输入完成后,必须输入命令".",服务器就会停止数据的接受.
  
  
  QUIT 退出系统
  
  
  上面是一些基本命令的描述,如果大家还有什么不懂的地方,可以参考TCP/IP有关的书籍,也可以到这个网站看看RFC文档:http://210.25.132.18/rfc/index.html
  
  
  现在我们正式开始,看看在C# 中如何来进行工作。
  
  
  第一步:创建一个类,命名为MailSend,这个类继承System.Net.Sockets.TcpClient
  
  
  using System;
  
  
  using System.Net.Sockets;//用于处理网络连接
  
  
  using System.IO; //用于处理附件的包
  
  
  using System.Text;//用于处理文本编码
  
  
  using System.Data;
  
  
  using System.Net;
  
  
  public class MailSend:TcpClient
  
  
  {
  
  
  public MailSend()
  
  
  {
  
  
  }
  
  
  }
  
  
  在这里我要讲讲TcpClient这个类,它的主要作用就是为TCP网络服务提供客户端的连接,大家可以看到,他来源于Sockets这个包,实际上是基于 Socket 类构建。不过他以更高的抽象程度提供 TCP 服务,操作起来也更简单。
  
  
&n
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 用C#制作屏幕捕获程序
    • .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上
    • 遍历ArrayList易犯错误
    • C#对XML操作:一个处理XML文件的类(1)
    • .NET简谈反射(动态调用)
    • 使用C#编写LED样式时钟控件
    • DataList嵌套问题 如何删除内层子DataList的记录
    • 怎样用C#实现完整文档打印功能
    • .NET简谈自定义事务资源管理器
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1