使用SMTP协议,用C++编程。怎么做?

解决方案 »

  1.   

    别自己做了,网上许多地方有smtp的例子程序,可以大大节约你的时间。(用google找smtp vc  源码).也许有的老一些,是不带验证的,其实很简单,只要加上两次BASE64编码的用户名和密码验证就行了,非常简单的,你先下载一个,不懂就问吧。
      

  2.   

    就是这个BASE64编码的用户名和密码不知道怎么做!
      

  3.   

    base6编码的vb源码,自己翻译吧~~Private Function Base64_Encode(strSource) As String 'base6加密算法
        Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
        Dim strTempLine As String
        Dim j As Integer
        For j = 1 To (Len(strSource) - Len(strSource) Mod 3) Step 3
            strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
                          + Asc(Mid(strSource, j + 1, 1)) \ 16) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 _
                          + Asc(Mid(strSource, j + 2, 1)) \ 64) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 2, 1)) Mod 64) + 1, 1)
        Next j
        If Not (Len(strSource) Mod 3) = 0 Then
             If (Len(strSource) Mod 3) = 2 Then
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
                          + Asc(Mid(strSource, j + 1, 1)) \ 16 + 1, 1)
                 strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 + 1, 1)
                strTempLine = strTempLine & "="
            ElseIf (Len(strSource) Mod 3) = 1 Then
                strTempLine = strTempLine + Mid(BASE64_TABLE, Asc(Mid(strSource, j, 1)) \ 4 + 1, 1)
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 + 1, 1)
                 strTempLine = strTempLine & "=="
            End If
         End If
        Base64_Encode = strTempLine
    End Function
      

  4.   

    网上有现成的base64编码vc源程序,仔细找找,找不到告诉我。
      

  5.   

    发信人: lofuture (恨死小日本※美国), 信区: WWW 
    标 题: BASE64编码规则 
    发信站: BBS 水木清华站 (Tue Jan 2 12:18:23 2001) 该文章转载自Visualc版。 BASE64编码转换原理 Base64编码其实是将3个8位字节转换为4个6位字节,( 3*8 = 4*6 = 24 ) 这4个六位字节 
    其实仍然是8位,只不过高两位被设置为0. 当一个字节只有6位有效时,它的取值空间为0 
    到 2的6次方减1 即63,也就是说被转换的Base64编码的每一个编码的取值空间为(0~63) 
    。 
    事实上,0~63之间的ASCII码有许多不可见字符,所以应该再做一个映射,映射表为 
    ‘A‘ ~ ‘Z‘ ? ASCII(0 ~ 25) 
    ‘a’ ~ ‘z‘ ? ASCII(26 ~ 51) 
    ‘0’ ~ ‘9‘ ? ASCII(52 ~ 61) 
    ‘+‘ ? ASCII(62) 
    ‘/‘ ? ASCII(63) 
    这样就可以将3个8位字节,转换为4个可见字符。 
    具体的字节拆分方法为:(图(画得不好,领会精神 :-)) 
    aaaaaabb ccccdddd eeffffff 
    ~~~~~~~~ ~~~~~~~~ ~~~~~~~~ 
    字节 1 字节 2 字节 3 
    || 
    \/ 
    00aaaaaa 00bbcccc 00ddddee 00ffffff 注:上面的三个字节位原文,下面四个字节为Base64编码,其前两位均为0。 
    这样拆分的时候,原文的字节数量应该是3的倍数,当这个条件不能满足时,用全零字节 
    补足,转化时Base64编码用=号代替,这就是为什么有些Base64编码以一个或两个等号结 
    束的原因,但等号最多有两个,因为:如果F(origin)代表原文的字节数,F(remain)代 
    表余数,则 
    F(remain) = F(origin) MOD 3 成立。 
    所以F(remain)的可能取值为0,1,2. 
    如果设 n = [F(origin) – F(remain)] / 3 
    当F(remain) = 0 时,恰好转换为4*n个字节的Base64编码。 
    当F(remain) = 1 时,由于一个原文字节可以拆分为属于两个Base64编码的字节,为了 
    让Base64编码是4的倍数,所以应该为补2个等号。 
    当F(remain) = 2 时,由于两个原文字节可以拆分为属于3个Base64编码的字节,同理, 
    应该补上一个等号。 
      

  6.   

    用VB设计有安全认证服务的Email  
     
    2002-09-17· ·刘静··yesky 
      以往各网站的EMail系统均是根据标准的SMTP协议编写的,现在为了更有效地抑制垃圾邮件的泛滥,国内各大免费邮箱提供商纷纷开始采用ESMTP的方式设计E-mail收发服务。发送邮件需要对用户的身份进行验证,如果帐号和密码有误,ESMTP服务器则拒绝发送该邮件返回553错误代码。通过对协议的分析我找到设计这样EMail的方法,我们可以用Visual Baisc轻松完成。  一、 相关知识的介绍  ESMTP(Extension SMTP)即认证的邮件传输方式,是邮件服务器系统为了限制非本系统的正式用户利用本系统散发垃圾邮件或其他不当行为而开设的一项安全认证服务。它与传统的SMTP方式相比,主要的不同有两点:  1. 支持8-bit MIME格式的编码。  2. 支持用户身份的验证。  多了一道用户身份的验证手续,验证之后的邮件发送过程与传统的SMTP方式一致。为了方便用户的使用,绝大多数的ESMTP服务器都继承了POP3服务器的帐号和密码设置体系,也就是说收发邮件都用同一个帐号和密码。  根据[RFC 2554]规范,SMTP的认证功能主要是增加了AUTH命令。AUTH命令有多种用法,而且有多种认证机制。AUTH支持的认证机制主要有LOGIN,CRAM-MD5[注1]等。LOGIN应该是大多数免费邮件服务器都支持的,网易与新浪都支持。下面主要针对LOGIN方式进行介绍,其它方式请根据相应的RFC 规范进行修改。
    LOGIN 方式口令-应答过程如下(S:表示服务器返回,C:表示客户端发送)  1. C: AUTH LOGIN   2. S: 334 dXNlcm5hbWU6   3. C: dXNlcm5hbWU6   4. S: 334 cGFzc3dvcmQ6   5. C: cGFzc3dvcmQ6   6. S: 235 Authentication successful.    (1). 为客户端向服务器发送认证指令。    (2). 服务端返回base64编码串,成功码为334。编码字符串解码后为"username:",说明要求客户端发送用户名。    (3). 客户端发送用base64编码的用户名,此处为"username:"。    (4). 服务端返回base64编码串,成功码为334。编码字符串解码后为"password:",说明要求客户端发送用户口令。    (5). 客户端发送用base64编码的口令,此处为"password:"。    (6). 成功后,服务端返回码为235,表示认证成功可以发送邮件了