使用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
实际上原理也就是利用套接字(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
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>