2009-06-01 41 views

Respuesta

3

Lo que probablemente necesite es un analizador de correo electrónico/MIME. Analizar todo el campo de encabezado no es muy difícil, pero separar varios tipos MIME como imágenes, archivos adjuntos, varias partes de texto y html, etc. puede ser muy complejo.

Utilizamos una herramienta de terceros, pero existen muchas herramientas/bibliotecas de C#. Buscar un analizador MIME gratis de C# en Google. Como si tuviera éste:

http://www.codeproject.com/Articles/11882/Advanced-MIME-Parser-Creator-Editor http://www.lumisoft.ee/lswww/download/downloads/Net/info.txt

3

Conseguir un analizador MIME decente sería probablemente un camino a seguir. Usted puede tratar de utilizar un analizador MIME libre (como this one de CodeProject) pero los comentarios del autor código como este

trabajaba en este casi al mismo tiempo que trabajé en una clase contenedora para archivos MSG . Gran diferencia en la dificultad . Donde envoltorio EML clase tal vez tomó un día para leer la especificación y obtener a la derecha, la clase contenedora MSG tomó una semana.

me hizo sentir curiosidad por la calidad del código. Estoy seguro de que puede hackear un analizador de mime que analiza el 95% del correo electrónico correctamente en unos días/horas. También estoy seguro de que acertar el 5% restante llevará meses. Considere manejar S/MIME (correo electrónico cifrado y firmado), Unicode, correos electrónicos mal formados producidos por clientes y servidores de correo, varios esquemas de codificación, problemas de internacionalización, asegurarse de que los correos electrónicos formados intencionalmente no bloqueen su aplicación, etc ...

Si el correo electrónico que necesita analizar viene de una sola fuente, el analizador sucio & puede ser suficiente. Si necesita analizar correos electrónicos de la naturaleza, podría ser necesaria una solución mejor.

Recomendaría nuestro Rebex Secure Mail component, pero estoy seguro de que obtendrá resultados decentes con componentes de otros proveedores también.

Asegurarse de que el analizador de su elección funciona correctamente en el infame "Mensaje de muestra de Mime Torture" preparado por Mike Crispin (coautor de MIME e IMAP RFC). El testing message is displayed in MIME Explorer sample y puede ser downloaded en el paquete de instalación.

siguiente código muestra cómo leer y analizar el archivo EML:

using Rebex.Mail; 

MailMessage message = new MailMessage(); 
message.Load("file.eml"); 
+1

+1 para "También estoy seguro de que conseguir la derecha el 5% restante se llevará meses" –

9

LumiSoft incluye un Mime parser.

Sasa incluye un analizador Mime también.

+1

Sasa funcionó muy bien. Gracias Mauricio –

+4

uso de referencia en caso de que alguien esté buscando: https://github.com/fschwiet/ManyConsole/blob/master/SampleConsole/DumpEmlFiles.cs –

+2

Ahora está en https://github.com/fschwiet/ManyConsole/blob/ master/SampleConsole/DumpEmlFilesCommand.cs –

59

he publicado un proyecto de ejemplo para ilustrar esta respuesta to Github

El CDO COM DLL es parte de Windows/IIS y se puede hacer referencia en .NET. Proporcionará un análisis preciso y un bonito modelo de objetos. Úselo en conjunción con una referencia a ADODB.DLL.

public CDO.Message LoadEmlFromFile(String emlFileName) 
{ 
    CDO.Message msg = new CDO.MessageClass(); 
    ADODB.Stream stream = new ADODB.StreamClass(); 

    stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty); 
    stream.LoadFromFile(emlFileName); 
    stream.Flush(); 
    msg.DataSource.OpenObject(stream, "_Stream"); 
    msg.DataSource.Save(); 

    stream.Close(); 
    return msg; 
} 

- Agregado de agosto de 2017 También puedes ver MimeKit: https://github.com/jstedfast/MimeKit. Es compatible con .Netstandard, por lo que se ejecutará multiplataforma.

+1

Ries, he buscado una solución todo el día, he encontrado muchos analizadores y bibliotecas .net que funcionan en parte. Su biblioteca sugerida de Windows funciona al 100%. Esta respuesta debe estar en primer lugar y por encima de otros. – Tomas

+0

¿ha podido usar esto desde una aplicación de 64 bits? ¿Dónde hizo referencia a la DLL? –

+0

Pude usar esta solución en Windows 2008 Standard R2, desafortunadamente no funciona en Windows 2008 Standard (no R2). También ofrece muchos problemas compatibles durante el uso en Windows 2008 o Windows 7. – Tomas

1

Probar:

  • febootimail
  • SmtpExpress
  • LinkWS Boletín Turbo
  • emlBridge - importar archivos EML a Outlook y prácticamente cualquier otro cliente de correo electrónico
  • Boletín 2.1 Turbo
  • ThunderStor (emlResender)
  • Ruby (usando eml2mbox). Ver jimbob method.
  • Evolución - crear un nuevo mensaje, adjuntar el archivo EML,

Escribir un programa:

Soluciones:

  • $ mail.eml gato | mail -s -c Pero los encabezados no se analizarán ni los archivos adjuntos.
  • soltarlos a su cuenta Gmail (Firefox guardarlas como archivos adjuntos)
+0

La pregunta especifica C# .NET pero sus respuestas en la sección Try apuntan a soluciones que no son C#. – CodeMonkeyKing

2

simplemente empecé a usar el Mimo-parte de Papercut para esto. Parece decente y simple a primera vista.

public void ProcessRawContents(string raw) 
    { 
     // NB: empty lines may be relevant for interpretation and for content !! 
     var lRawLines = raw.Split(new []{"\r\n"}, StringSplitOptions.None); 
     var lMailReader = new MimeReader(lRawLines); 
     var lMimeEntity = lMailReader.CreateMimeEntity(); 
     MailMessageEx Email = lMimeEntity.ToMailMessageEx(); 
     // ... 
    } 

(MailMessageEx es, por supuesto, derivado de MailMessage.)

7

Follow this link for a good solution:

El resumen del artículo es de 4 pasos (El segundo paso por debajo de falta en el artículo, pero es necesario):

  1. Agregue una referencia a "Microsoft CDO para Biblioteca de Windows 2000", que se puede encontrar en la pestaña 'COM' en Visua l Diálogo 'Agregar referencia' de Studio. Esto agregará 2 referencias a "ADODB" y "CDO" en su proyecto.

  2. Deshabilitar la incrustación de tipos Interop para la referencia 2 "ADODB" y "CDO".(Referencias -> ADODB -> Propiedades -> Set 'Insertar Interop Tipos' False y repetir el mismo para CDO)

  3. añade el siguiente método en el código:

    protected CDO.Message ReadMessage(String emlFileName) 
    { 
        CDO.Message msg = new CDO.MessageClass(); 
        ADODB.Stream stream = new ADODB.StreamClass(); 
        stream.Open(Type.Missing, 
            ADODB.ConnectModeEnum.adModeUnknown, 
            ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,                   
            String.Empty, 
            String.Empty); 
        stream.LoadFromFile(emlFileName); 
        stream.Flush(); 
        msg.DataSource.OpenObject(stream, "_Stream"); 
        msg.DataSource.Save(); 
        return msg; 
    } 
    
  4. Llame a este método por el al pasar la ruta completa de su archivo eml y el objeto CDO.Message que devuelve tendrá toda la información analizada que necesita, incluyendo To, From, Subject, Body.

+0

¿Puede esto también pasar el Adjunto incluido en EML? – Rich

1

Aspose.Email para .NET

Aspose.Email para .NET es un conjunto de componentes para trabajar con mensajes de correo electrónico desde las aplicaciones .NET. Hace que sea fácil trabajar con varios formatos de mensaje de correo electrónico y archivos de almacenamiento de mensajes (PST/OST) junto con las capacidades de envío y recepción de mensajes.

Aspose.Email hace que sea fácil crear, leer y manipular una serie de formatos de mensaje tales como MSG, EML , archivos MHT y EMLX sin la necesidad de instalar Microsoft Outlook. No solo puede cambiar el contenido del mensaje , sino también manipular (agregar, extraer y eliminar) los archivos adjuntos de un objeto de mensaje. Puede personalizar encabezados de mensaje al agregar o eliminar destinatarios, cambiar el asunto u otras propiedades. También le da control completo sobre un mensaje de correo electrónico al proporcionar acceso a sus propiedades Mapi.

lector de archivos C# Perspectivas de MSG y sin la necesidad de una perspectiva

MSGReader es una biblioteca de C# .NET 4.0 para leer archivos de Outlook MSG y EML (Mime 1.0). Casi todos los objetos comunes en Outlook son compatibles.

Cuestiones relacionadas