Pregunta

Necesito leer desde el archivo .MSG de Outlook en .NET sin usando COM API para Outlook (porque no se instalará en las máquinas en las que se ejecutará mi aplicación).¿Existen bibliotecas gratuitas de terceros para hacer eso?Quiero extraer los campos De, Para, CC y CCO.Los campos de fecha de envío/recepción serían buenos si también se almacenaran en archivos MSG.

¿Fue útil?

Solución 2

Actualizar: Encontré una biblioteca COM de terceros llamada Redención de perspectivas que me está funcionando bien en este momento.Si lo usa a través de COM-Interop en .NET, no olvide liberar todos los objetos COM una vez que haya terminado; de lo contrario, su aplicación fallará aleatoriamente.

Otros consejos

Hay código disponible en CodeProject para leer archivos .msg sin COM.Ver aquí.

Aquí hay un ejemplo de código VBA usando Redención de perspectivas que encontró Huseyint.

Public Sub ProcessMail()

   Dim Sess As RDOSession
   Dim myMsg As RDOMail
   Dim myString As String

   Set Sess = CreateObject("Redemption.RDOSession")
   Set myMsg = Sess.GetMessageFromMsgFile("C:\TestHarness\kmail.msg")

   myString = myMsg.Body
   myMsg.Body = Replace(myString, "8750", "XXXX")

   myMsg.Save

End Sub

Microsoft ha documentado esto: Especificación de formato de archivo .MSG

Es un documento de "almacenamiento estructurado".He utilizado con éxito El código de Andrew Peace. para leerlos en el pasado, incluso bajo .NET (usando C++/CLI): es limpio y bastante fácil de entender.Básicamente, necesita determinar qué registros necesita y consultarlos; se vuelve un poco complicado, ya que diferentes versiones de Outlook y diferentes tipos de mensajes darán como resultado diferentes registros...

Puedes probar nuestro (comercial) Correo seguro de Rebex biblioteca.Puede leer el formato MSG de Outlook.El siguiente código muestra cómo:

// Load message
MailMessage message = new MailMessage();
message.Load(@"c:\Temp\t\message.msg");

// show From, To and Sent date
Console.WriteLine("From: {0}", message.From);
Console.WriteLine("To: {0}", message.To);
Console.WriteLine("Sent: {0}", message.Date.LocalTime);

// find and try to parse the first 'Received' header
MailDateTime receivedDate = null;
string received = message.Headers.GetRaw("Received");
if (received != null)
{
    int lastSemicolon = received.LastIndexOf(';');
    if (lastSemicolon >= 0)
    {
        string rawDate = received.Substring(lastSemicolon + 1);
        MimeHeader header = new MimeHeader("Date", rawDate);
        receivedDate = header.Value as MailDateTime;
    }
}

// display the received date if available
if (receivedDate != null)
    Console.WriteLine("Received: {0}", receivedDate.LocalTime);

Puede encontrar más información sobre las fechas de envío y recepción y cómo se representan en el mensaje en http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones

Si abre el archivo .MSG en un editor de texto, creo que encontrará que la información que busca se almacena como texto sin formato dentro del archivo.(Está al menos en todos los mensajes que he revisado)

Sería bastante fácil escribir código para analizar el archivo buscando líneas que comiencen con "De:" o "Para:", etc.y luego extraer la información que necesita.

Si también necesita el cuerpo del correo electrónico, puede resultar un poco más complicado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top