miércoles, 30 de octubre de 2013

C#: Leer archivos adjuntos email con interops

El articulo de hoy expone un modo sencillo para leer los adjuntos de un correo de outlook usando la librería Microsoft.Office.Interop.Outlook en lenguaje C#. No sería un tema pionero ya que hay muchas librerías que permiten hacerlo desde hace tiempo pero aquí está por si alguien lo necesita.

En mi caso no consigo hacer que la gente suba la documentación a un aplicativo porque les llega por correo y pierden tiempo descargándolos fichero a fichero para posteriormente clasificarlos en la aplicación. La idea es proporcionarles una interfaz en el aplicativo de gestión que les permita seleccionar un correo, muestre todos sus adjuntos permitiendo seleccionar uno o varios y clasificarlos de manera rápida el mismo formulario.

Os paso el código:
public static class Lib 
{
   public static List<byte[]> LeerAdjuntosMail(string pMail) 
   {
    try
    {
     Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
     MailItem mail = app.CreateItemFromTemplate(pMail);
     List<byte[]> archivos = new List<byte[]>();

     foreach (Attachment adj in mail.Attachments) 
     {
       string filepath = string.Format(@"{0}\{1}", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), adj.DisplayName);
       adj.SaveAsFile(filepath);
       archivos.Add(FileToByte(filepath));
       System.IO.File.Delete(filepath);
     }
     return archivos;
     }
     catch (System.Exception ex)
     {
        throw ex;
     }
   }

   public static byte[] FileToByte(string sFullFileName)
   {
    try
    {
      byte[] bytes;
      // Declaramos fs para tener acceso al fichero residente en la maquina cliente.
      using (FileStream fs = new FileStream(sFullFileName, FileMode.Open))
      {
        using (BinaryReader br = new BinaryReader(fs))
        {
          bytes = new byte[(int)fs.Length];
          br.Read(bytes, 0, bytes.Length);
        }
      }
      return bytes;
      }
      catch (System.Exception ex)
      {
        throw ex;
      }
    }
}
El método LeerAdjuntosEmail espera como parámetro la ruta donde se ha descargado el email, de momento al ser una versión que no tengo claro que vayan a usar no perdemos demasiado tiempo en conectar a un buzón ni nada por el estilo si no que partimos del correo una vez descargado a disco para leer sus adjuntos (.msg).

Hasta aquí el artículo de hoy, podéis seguir areaTIC en las principales redes sociales, comentar y valorar todo lo que os apetezca y más. Hasta la semana que viene!

No hay comentarios:

Publicar un comentario