邮件发送中,客户端如何获得关于服务器是支持SMTP还是ESMTP的信息? 是哪个命令是获得关于服务器支持的是SMTP,还是ESMTP协议的信息的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 C# 创建邮件发送组件(SMTP) -------------------------------------------------------------------------------- 2004-05-25 邮件发送在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编码转换后的密码。成功后,即可运行下面的命令了。 ..... 但是在之前不知道服务器是支持SMTP的还ESMTP的,我是发HELO还是EHELO呢? 我就是想在发送这些以前获得关于服务器支持的是哪个协议的信息,才好觉定用哪个命令和服务器交互呀 现在为了屏蔽垃圾邮件,一般大的网站的smtp server都是esmtp的,其他你不发送命令字没法知道它是属于哪种邮件服务器. 如果邮件服务器是ESMTP ,那么在客户端发送邮件之前,必须先验证用户名和密码,否则,不通过验证,是不能发送邮件的。但是如果是SMTP 服务器,那么只要连接上服务器以后,客户端就可以发送邮件。如何知道SMTP服务器是 SMTP 还是 ESMPT 呢?我今天在测试的时候,发现,只要对初始连接邮件服务器的返回信息作出处理就可以了:返回信息: 220 ESMTP 服务器 ...Ready因此,只要对返回的字符串查找:是否有 ESMTP 就可以了。 发送EHLO,如不支持,服务器会返回错误。再用HELO命令协商。 求助,fopen可不可以打开自定义资源中的文本文件TXT? Vc++里面显示的错误基本上会有哪些? 如何实现选择文件夹/驱动器的组合框? 程序员调试能力和相关书籍 我写的一个人材库软件 AfxBeginThread设置工作线程的问题,求救!! 投分问路--怎样实现在局域网内多台主机之间传送自己画的位图 人民帮人民一把之十一(困惑ing,希望今天能搞明白) 打开文件总是出现问题,请高手给解决!!! 关于获取键盘消息,答者有分……帮帮忙吧!很急!!! Debug版本通过,release版本却出错,请大家进来看看! 求助:有关图像合成的。
2004-05-25
邮件发送在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编码转换后的密码。成功后,即可运行下面的命令了。
.....
我就是想在发送这些以前获得关于服务器支持的是哪个协议的信息,才好觉定用哪个命令和服务器交互呀
否则,不通过验证,是不能发送邮件的。但是如果是SMTP 服务器,那么只要连接上服务器以后,客户端就可以发送邮件。如何知道SMTP服务器是 SMTP 还是 ESMPT 呢?
我今天在测试的时候,发现,只要对初始连接邮件服务器的返回信息作出处理
就可以了:
返回信息: 220 ESMTP 服务器 ...Ready因此,只要对返回的字符串查找:是否有 ESMTP 就可以了。
再用HELO命令协商。