winsock MIME ficheros adjuntos base64

fangosto
02 de Septiembre del 2004
Tango bastante avanzada mi aplicación para bajarme los correos de diferentes cuentas POP. Guardo los mensajes con extensión .eml para comprobar en outloock que los he bajado bien, pero precisamente lo que no quiero es utilizar Outloock y eso implica que debo aprender a guardar los ficheros que me bienen codificados en base64 (jpg,bmp,doc,etc.).
Os adjunto un código de decodificación de uno de los ficheros que me he bajado de un mail. ´He comprobado que el código de decodificación es correcto, pero al guardar el fichero e intentar abrirlo con Imagin me dice que el formato es desconocido. ¿Alguién sabe por qué?

Option Explicit
Dim Base64Chars
'Código obtenido de www.tutoriales.org

Private Sub Command1_Click()

Dim w1, w2, w3, w4, n, strOut
Dim strIn As String

Base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

Command1.Enabled = False
strIn = _
"Qk0eAQAAAAAAAHYAAAAoAAAAEgAAAA4AAAABAAQAAAAAAKgAAAAAAAAAAAAAABAAAAAAAAAA" & vbCrLf & _
"AAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A" & vbCrLf & _
"/wD//wAA////AIiIiIiIiIiIiAAAAIiIiIiICAiIiAAAAIiIiIiAgPCIiAAAAIiIiIgID/8I" & vbCrLf & _
"iAAAAIiIiICA/P/wiAAAAIiIiAgPz8kfCAAAAIiIgID8/PEQiAAAAIAACA//z/8ACAAAAICA" & vbCrLf & _
"cICIiIADCAAAAICzAAAAAAAzCAAAAICA+/v7+/sDCAAAAIAPv7+/v7+wCAAAAIAAAAAAAAAA" & vbCrLf & _
"CAAAAIiIiIiIiIiIiAAAAA=="

strOut = ""
For n = 1 To Len(strIn) Step 4
w1 = mimecode(Mid(strIn, n, 1))
w2 = mimecode(Mid(strIn, n + 1, 1))
w3 = mimecode(Mid(strIn, n + 2, 1))
w4 = mimecode(Mid(strIn, n + 3, 1))
If w2 >= 0 Then strOut = strOut + Chr(((w1 * 4 + Int(w2 / 16)) And 255))
If w3 >= 0 Then strOut = strOut + Chr(((w2 * 16 + Int(w3 / 4)) And 255))
If w4 >= 0 Then strOut = strOut + Chr(((w3 * 64 + w4) And 255))
Next n

Open "c:windowstempMiAdjunto.bmp" For Binary As #1
Put #1, , strOut
Close #1
MsgBox "Finalizada la decodificación"
End Sub

Function mimecode(ByVal strcode)
If Len(strcode) = 0 Then
mimecode = -1
Exit Function
Else
mimecode = InStr(Base64Chars, strcode) - 1
End If
End Function