Visual Basic - Extraer adjuntos de correo eml

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 05/11/2020 20:36:27
hola, tengo una carpeta con correos en eml, ¿como puedo hacer un programa para extraerlos todos por lotes en una nueva carpeta?, por favor si teneis algun codigo en vb6 que haga esto o me vale una aplicacion compilada en otro lenguaje que se elija una carpeta y extraiga todos los eml en otra. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.868
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Andres Leonardo (1759 intervenciones) el 05/11/2020 21:16:30
Yo justo hice algo asi pero lo que hace es leerlos no entiendo qeu significa extraerlos si me podrias indicar

por uqe si es asi podrias crear un .bat que te copie los *.eml de una ruta a otra....




LeeEML
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 06/11/2020 09:24:06
gracias por contestar Andres, te explico: Hace tiempo extraje los correos de outlook como archivos .eml, los tengo en una carpeta, cada uno de estos archivos eml contiene todo el correo y los archivos adjuntos embebidos, por ejemplo: tengo un correo que se llama "powerpoint de casas curiosas.eml", si lo abres con el bloq de notas te aparece el remitente, el destinatario, el asunto, el mensaje y luego un ...file="casas.pps" o algo así, a continuacion un montón de caracteres ascii "..Äãi'6VÂ4hM@R÷Då†0ƒ..." que en teoría deber el archivo pps embebido, lo que necesito es procesar todo el directorio, abrir cada archivo .eml y sacar por un lado el mensaje con asunto, remitente, etc ,(casas curiosas.txt) y si tiene algun adjunto, un video (casascuriosas.mp4), imágenes (casa1.jpg, casa2.jpg..), pps (casascuriosas.pps), audios, etc, enfin todos los archivos que contengan, extraerlos también, he probado haciendo el burro con un editor hexadecimal a copiar ese codigo en un archivo nuevo con la extensión correspondiente pero no funciona, debe haber algún tipo de compresión o encriptación, además hacerlo asi con 2 o 3 gb de correo es eterno, por favor ayudame si puedes. Gracias, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.868
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Andres Leonardo (1759 intervenciones) el 06/11/2020 15:00:09
Tienes algun ejemplo del eml .. subelo para ver que se puede hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 06/11/2020 19:36:00
te adjunto un correo a ver que puedes hacer, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 09/11/2020 16:37:22
hola Andres, ¿has podido ver algo?. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.868
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Andres Leonardo (1759 intervenciones) el 10/11/2020 03:18:36
Cree una carpeta en un archivo PST
puse los archivos eml en esa carpeta y los comence a analizar.
lo que aun no puedo es identificar ese objeto como correo aunque lo comenzo a listar.
SAludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 10/11/2020 09:55:50
te doy mas información, porque no consigo hacerlo, creo que la idea la tengo pero no me centro, estoy con una medicación fuerte para la ansiedad y la depresión que no me deja pensar.

1. la idea es abrir el fichero .eml y recorrerlo hasta encontrar "filename=" que contiene el nombre del adjunto, algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Private Sub VerContenido(Fichero As String)
    Dim Canal As Integer
    Dim Cadena As String
    Dim NombreArchivo As String
    Dim Contenido As String
    Dim Adjunto As String
    Dim t As Integer
 
    If Len(Fichero) = 0 Then Exit Sub
 
    NombreArchivo = ""
    Contenido = ""
    Adjunto = ""
 
    Canal = FreeFile()
    Open Fichero For Input As #Canal
 
    Do While Not EOF(Canal)
        'lee una linea del fichero origen
        Line Input #Canal, Cadena
 
	' Si la variable NombreArchivo esta vacia el contenido se añade a Contenido
        ' Aqui se guarda todo el mensaje del correo menos los adjuntos en txt
        If NombreArchivo = "" Then Contenido = Contenido + Cadena + Chr$(13) + Chr$(10)
        ' Si se ha encontrado el nombre de un adjunto
        ' el contenido del adjunto se guarda en la variable Adjunto
        If NombreArchivo <> "" Then
            If Cadena <> "" Then
                Adjunto = Adjunto + Cadena
            End If
        End If
 
	' Si encontramos "filename=" quiere decir que hay un adjunto
        t = InStr(LCase(Cadena), "filename=")
        If t > 0 Then
            NombreArchivo = Mid$(Cadena, t + 10)
            NombreArchivo = Left(NombreArchivo, Len(NombreArchivo) - 1)
        End If
    Loop
    Close #Canal    ' Cierra el archivo.
 
End Sub

2. Ahora tenemos dos variables, Contenido con todo el mensaje menos los adjuntos que se guardaria como aguaococacola.txt y la variable Adjunto que contiene el adjunto codificado en Base64, habria que pasar esa codificación a binario y guardarla como aguaococacola.pps, para eso he encontrado estas funciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
' Codificar y Decodificar en BASE64
 
Public Function DecodeBase64(ByVal strData As String) As Byte()
    Dim objXML As Object
    Dim objNode As Object
 
    Set objXML = CreateObject("MSXML2.DOMDocument")
    Set objNode = objXML.createElement("b64")
    objNode.dataType = "bin.base64"
    objNode.Text = strData
    DecodeBase64 = objNode.nodeTypedValue
 
    Set objNode = Nothing
    Set objXML = Nothing
 
End Function
 
 
Public Function EnecodeBase64(ByVal strData As String) As Byte()
    Dim objStream As Object
    Dim objNode As Object
    Dim objXML As Object
    Dim bArray() As Byte
 
    Set objStream = CreateObject("ADODB.Stream")
 
    With objStream
        .Type = 2
        .Open
        .Charset = "unicode"
        .WriteText strData
        .Flush
        .Position = 0
        .Type = 1
        .read (2)
        bArray = .read
        .Close
    End With
 
    Set objXML = CreateObject("MSXML2.DOMDocument")
    Set objNode = objXML.createElement("b64")
 
    objNode.dataType = "bin.base64"
    objNode.nodeTypedValue = bArray
    EnecodeBase64 = objNode.Text
 
    Set objStream = Nothing
    Set objNode = Nothing
    Set objXML = Nothing
 
End Function

3. Si hay varios adjuntos se tiene que repetir el proceso.

a). Tengo problemas para encontrar el final del adjunto.
b). No sé como pasar la variable Adjunto para que funcione la decodificacion Base64
c). No sé como guardar el archivo Adjunto una vez pasado a binario.

He intentado varias cosas pero todas me dan error.

Gracias, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 16/11/2020 19:48:45
¿conseguistes algo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.868
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Andres Leonardo (1759 intervenciones) el 16/11/2020 23:04:58
nada no me deja leer los eml, los leo en mi carpeta pero no me deja el contenido ponerlo como archivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 17/11/2020 08:24:33
es lo que yo he conseguido con el código que he puesto, nada mas. A ver si con suerte hay alguien que nos desvele el secreto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 560
Bronce
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por gilman (302 intervenciones) el 17/11/2020 10:34:52
Viendo el misterio, he echado un vistazo en iternet, he visto lo que eran, y me he bajado el fichero de ejemplo, en cuanto lo he abierto he visto que tenía el icono de Outlook, he hecho doble click y me lo ha abierto pefectamente con Oultook.
Si tienes Oultook instalado pero al hacer doble click no lo abre, o abre otra cosa, prueba con la opción abrir con...

Si eso funciona, y lo que quieres es un proceso automatizado para extraer todos los adjuntos, prueba a en un proyecto de VB6, cargar las referencias al Outlook y estoy seguro que podrás extraer todo mediante los métodos que incorpora esa referencia, te intentaría ayudar más, pero no soy esperto en automatización de Outlook, y no se como deberías hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 17/11/2020 11:16:52
gracias Gilman, pero no tengo outlook.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 560
Bronce
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por gilman (302 intervenciones) el 17/11/2020 11:19:31
Si los quieres tratar individualmete, mira este enlace:
https://es.wikihow.com/abrir-archivos-EML
ofrece alternativas a Oultook.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Extraer adjuntos de correo eml

Publicado por Adla (17 intervenciones) el 17/11/2020 18:24:19
gracias gilman

he encontrado esto que es lo que mas se parece a lo que necesito, pero hay que limpiar el código y hacer justamente lo contrario, decodificar a binario, además de recorrer todos el .eml y sacar todos los adjuntos, al final hay un zip con el código.

https://www.vbforums.com/showthread.php?379072-VB-Fast-Base64-Encoding-and-Decoding
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar