我想做一个程序
可以用Winsock控件发送电子邮件(目前只用于发送,还未考虑接收)。
但是我不知道Esmtp协议的具体格式
我曾经用两台电脑拦截FoxMail发送的邮件
但是拦截下来的数据好像被加密了希望做个这方面的高手帮忙谢谢

解决方案 »

  1.   

    客户连接请求1   
        
      向主机连接请求1   
        
      向主机连接请求被接受1   
        
      客户连接请求被接受1   
        
      主机端:1   
      220   smtp.263.net   ESMTP   
        
      客户端:1   
      EHLO   cx   
        
      主机端:1   
      250-smtp.263.net   
      250-PIPELINING   
      250-SIZE   10240000   
      250-ETRN   
      250-AUTH   LOGIN   
      250   8BITMIME   
        
      客户端:1   
      AUTH   LOGIN   
        
      主机端:1   
      334   VXNlcm5hbWU6   
        
      客户端:1   
      eHpqeHU=   
        
      主机端:1   
      334   UGFzc3dvcmQ6   
        
      客户端:1   
      *******   
        
      主机端:1   
      235   Authentication   successful   
        
      客户端:1   
      MAIL   FROM:   <[email protected]>   
        
      主机端:1   
      250   Ok   
        
      客户端:1   
      RCPT   TO:   <[email protected]>   
        
      主机端:1   
      250   Ok   
        
      客户端:1   
      DATA   
        
      主机端:1   
      354   End   data   with   <CR><LF>.<CR><LF>   
        
      客户端:1   
      Message-ID:   <[email protected]>   
      From:   "xzjxu"   <[email protected]>   
      To:   <[email protected]>   
      Subject:   aaa   
      Date:   Thu,   15   Feb   2001   01:17:24   +0800   
      MIME-Version:   1.0   
      Content-Type:   text/plain;   
      charset="gb2312"   
      Content-Transfer-Encoding:   base64   
      X-Priority:   3   
      X-MSMail-Priority:   Normal   
      X-Mailer:   Microsoft   Outlook   Express   5.50.4133.2400   
      X-MimeOLE:   Produced   By   Microsoft   MimeOLE   V5.50.4133.2400   
        
      DQo=   
        
      .   
        
      主机端:1   
      250   Ok:   queued   as   075311C681030   
        
      客户端:1   
      QUIT   
        
      主机端:1   
      221   Bye   
        
      主机断开:1   
        
      客户断开:1
      

  2.   

    一般情况下,如果向一个SMTP服务器发送邮件,可以分成如下几种情况:
    1 不用转发。比如我要给一个163的邮箱发邮件,那么我直接发送到163的SMTP服务器中。关于如何通过邮箱地址获得对方SMTP服务器的地址,可以通过 DNS的MX查询。我曾经写过一篇文章,通过分析qmail的代码来讲解DNS的MX查询。里面还实现了一个简单的DNS的MX查询程序。在这里:
    http://blog.csdn.net/monnand/archive/2006/07/15/924731.aspx
    这种情况下,是不需要认证的。但是一般的服务器会反向解析你的域名(因为你在EHLO或者HELO时候提供了你的域名),看看你提供的域名是否与DNS查询到的结果相同。如果不同,将会把你看做是垃圾邮件的发送者2 需要转发,这是大多数MUA(比如foxmail啦,outlook啦)的实现方式。你在使用这些MUA的时候都会让你设置一个SMTP服务器。有的是需要认证的(现在大多数的都需要认证)。也就是说,不管你发送邮件到什么地方,都会把邮件发送给某个特定的SMTP服务器,由这个服务器进行转发。认证方式看我的文章就好了:
    http://blog.csdn.net/monnand/archive/2006/08/17/1076581.aspx关于邮件的格式,可以看RFC2822关于邮件传输协议,可以看RFC2821关于ESMTP的相关认证方式,可以看我的文章:
    http://blog.csdn.net/monnand/archive/2006/08/17/1076581.aspx
    以及其中提到的参考资料关于DNS的MX查询,可以看我的文章:
    http://blog.csdn.net/monnand/archive/2006/07/15/924731.aspx
    以及其中提到的参考资料