发送过程中附件的编码需要采用Base64格式,请教高手发附件是怎么样的过程,如何实现,请高手指教,如测试通过追加100分

解决方案 »

  1.   

    附件是编码在MIME格式的信里的,你要做的就是编码一份MIME的信来。然后就和普通的信一样发就行
      

  2.   

    mime的格式
    协议对话,你可以用 网络监视软件看看foxmail outlook的网络数据就行
      

  3.   

    电子邮件发附件的过程和普通发邮件的过程是一样的,是完全没有区别的。
    只是带附件的邮件里内容比普通的邮件内容多了由MIME编码的文件内容而已。
    如果你想了解邮件的格式,可以拿OutLook创建邮件,然后另存为eml文件,
    可以用记事本打开eml文件的方法来观察邮件内容格式。
    至于MIME编码是如何进行的?其原理在网络上也有很多说明。
    MIME编码分为两种,一种是16进制,一种是64进制
    16进制接触了很多了,通常我们平常看到的是这样的16进制:
    D3 F2 C3 FB
    在网页的URL编码里是这样表示的
    %D3%F2%C3%FB
    而在邮件里则是这样而已
    =D3=F2=C3=FB64进制在平时就接触得少一点,不过也不是很难的是,说白了就是进制转换的问题
    我们在VB里使用的最小的单位是字节,而一个字节的范围是0-255,
    如果想存256这个数字就必须由两个字节来存储,也就是到了256就进了一个字节位,
    也就是说是256进制。如果要将文件的字节内容转换成邮件的附件内容,其实就是个
    进制转换的问题。其实可以选择用16进制或64进制的,只是因为如果要将字节内容
    转换为文本形势的16进制数占用的实际空间要比64进制表是的文本内容大,所以通常
    都会用64进制的方式进行编码。其实一个字节的数值范围是0-255,255在二进制里表示则是11111111,即8个二进制位所组成,
    而64进制的数值范围是0-63,而63在二进制里表示则是111111,即6个二进制位
    而64进制的表示码是:
    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
    A 表示数值 0
    B 表示数值 1
    C 表示数值 2
    D 表示数值 3
    ...
    8 表示数值 60
    9 表示数值 61
    + 表示数值 62
    / 表示数值 63比如要将4个字节转换成64进制表是可以这样来看字符串                    域                  名
    ASCII码16进制       D3       F2       C3      FB
    二进制表示       11010011 11110010 11000011 11111011
    上面是以二进制8位的排列方式排列的,下面我们按6位,即64进制的排列方法看一下
    MIME64二进制    110100 111111 001011 000011 111110 110000
    MIME64码数值       52     63     11     3      62    48
    MIME64码            0      /      L     D       +     w
    因为实际的二进制位只有 110100 111111 001011 000011 111110 11
    因为最后的字节需要补齐 110100 111111 001011 000011 111110 110000
    如果差两个二进制位由一个“=”补充说明,现在差4个二进制位,所以就以“==”补充说明
    这也是MIME编码的规则之一MIME64码结果可以这样表示     0/LD+D==
      

  4.   

    谢谢楼上捧场,不过我贴错了,呵呵
    MIME64码结果可以这样表示    0/LD+w==
      

  5.   

    http://topic.csdn.net/u/20080629/14/dced8969-21d9-4ab4-9227-da7f62010d9f.html
      

  6.   

    上面的代码原VB代码当中是不支持附件发送的,所以基本上只是说明一个原理,需要自己进行一些修改.
    下面是一个Base64编码(很多年前的代码了,未考虑效率)
    Function MyASC(OneChar)
       If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
    End Function
    Private Function Base64Encode(inData)
       Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
       Dim cOut, sOut, i
       For i = 1 To Len(inData) Step 3
          Dim nGroup As Long
          Dim pOut, sGroup
          nGroup = &H10000 * Asc(Mid(inData, i, 1)) + &H100 * MyASC(Mid(inData, i + 1, 1)) + MyASC(Mid(inData, i + 2, 1))
          sGroup = Oct(nGroup)
          sGroup = String(8 - Len(sGroup), "0") & sGroup
          pOut = Mid(Base64, CLng("&o" & Mid(sGroup, 1, 2)) + 1, 1) + Mid(Base64, CLng("&o" & Mid(sGroup, 3, 2)) + 1, 1) + Mid(Base64, CLng("&o" & Mid(sGroup, 5, 2)) + 1, 1) + Mid(Base64, CLng("&o" & Mid(sGroup, 7, 2)) + 1, 1)
          sOut = sOut + pOut
          If (i + 2) Mod 57 = 0 Then sOut = sOut + vbCrLf
       Next
       Select Case Len(inData) Mod 3
          Case 1:
             sOut = Left(sOut, Len(sOut) - 2) + "=="
          Case 2:
             sOut = Left(sOut, Len(sOut) - 1) + "="
       End Select
       Base64Encode = sOut
    End Function
      

  7.   

    如果你想了解邮件的格式,可以拿OutLook创建邮件,然后另存为eml文件, 
    可以用记事本打开eml文件的方法来观察邮件内容格式。而且你还可以把你要发送的邮件内容存成文件的形势,如:mail.eml
    然后用OutLook打开看看结果对了没有。
      

  8.   

    我想发附件的编码没什么问题了,但接收到的邮件附件却是一堆乱码,即是之前的编码,
    并没有解码?请问怎么解决?
    公司邮件软件用的Lotus,对应解析是否有问题呢?
      

  9.   

    换句话说如何编一份MIME的信,请帮忙,谢谢!!!
      

  10.   


    就是你的邮件格式有问题,不然不会邮件编码没问题而不解码的。
    告诉你的方法你要去试验去观察去求证,不要自以为是先好不好。
    你先用Outlook做一个你想自己发的内容的eml文件,然后你对比一下和你的有什么不同再说。
    如果你的和Outlook一样,这样还不行,那就是那个邮件查看器的问题了。
      

  11.   

    楼上的一番话犹如当头棒喝,你说的很对,我仔细看了下邮件格式,发现是MIME格式有问题