是哪个命令是获得关于服务器支持的是SMTP,还是ESMTP协议的信息的?

解决方案 »

  1.   

    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编码转换后的密码。成功后,即可运行下面的命令了。 
    ..... 
     
      

  2.   

    但是在之前不知道服务器是支持SMTP的还ESMTP的,我是发HELO还是EHELO呢?
      我就是想在发送这些以前获得关于服务器支持的是哪个协议的信息,才好觉定用哪个命令和服务器交互呀
      

  3.   

    现在为了屏蔽垃圾邮件,一般大的网站的smtp server都是esmtp的,其他你不发送命令字没法知道它是属于哪种邮件服务器.
      

  4.   

    如果邮件服务器是ESMTP ,那么在客户端发送邮件之前,必须先验证用户名和密码,
    否则,不通过验证,是不能发送邮件的。但是如果是SMTP 服务器,那么只要连接上服务器以后,客户端就可以发送邮件。如何知道SMTP服务器是 SMTP 还是 ESMPT 呢?
    我今天在测试的时候,发现,只要对初始连接邮件服务器的返回信息作出处理
    就可以了:
    返回信息: 220  ESMTP 服务器 ...Ready因此,只要对返回的字符串查找:是否有 ESMTP 就可以了。
      

  5.   

    发送EHLO,如不支持,服务器会返回错误。
    再用HELO命令协商。