none
Obtener adjunto email más rapido RRS feed

  • Pregunta

  • Hola amigos, pues tengo un problema, lo que sucede es que estoy haciendo un sistema de facturación electrónica (CHILE), lo que debo hacer es leer cada xml adjunto que llega a un email y revisar la información para luego guardarla en una base de datos automaticamente.

    Estoy usando el siguiente procedimiento:

     var client = new ImapClient("imap.gmail.com", 993, true);
                     if (client.Connect())
                     {
                         if(client.Login("xxxx@gmail.com", "xxxx"))                
                         {
    
                             var z = client.Folders["INBOX"].Search("ALL", ImapX.Enums.MessageFetchMode.Attachments);
                             var s = "s";
                             foreach (var item in client.Folders["INBOX"].Search("ALL"))
                             {
                                 if (item.Attachments.Count() > 0)
                                 {
                                     Attachment xmlFile = new Attachment();
                                     string xml = string.Empty;
                                     foreach (var attach in item.Attachments)
                                     {
                                         string fname = attach.FileName;
                                         string extension = System.IO.Path.GetExtension(fname);
                                         if (extension == ".xml")
                                         {
                                             xmlFile = attach;                                    
                                             break;
                                         }
                                     }
    
                                     xmlFile.Download();
                                     if (xmlFile.Downloaded)
                                         xml = System.Text.Encoding.UTF8.GetString(xmlFile.FileData);
                                     else
                                         throw new Exception("No se pudo descarga el documento.");
    
                                     XmlDocument doc = new XmlDocument();
                                     doc.LoadXml(xml);
    
                                     XmlNodeList x = doc.GetElementsByTagName("RespuestaDTE");
                                     if (x.Count > 0)
                                         ViewBag.m = doc.InnerXml;
                                     else
                                         continue;
    
                                 }
    
                             }

    Bien, estoy usando ImapX 2, el codigo entra al mail, captura todos los correos, revisa solo los que tienen archivos adjuntos con extension XML, los descarga, los lee y los interpreta para X uso.... el problema radica en que el proceso es demasiado lento, ¿existirá otra forma de lograr esto pero más rápido?... Muchas gracias.

    sábado, 17 de octubre de 2015 21:50

Respuestas

  • hola

    te en cuenta que la operacion de obtener el attach requiere una descarga del archivo desde el servidor de mail, como si fuera un download, y eso demora

    estas usando una funcionalidad de ImapClient, la obtencion del attach requiere una descarga, a mi me parece que los tiempos que mencionas son correctos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta MAXDELPHI martes, 20 de octubre de 2015 13:45
    lunes, 19 de octubre de 2015 15:08

Todas las respuestas

  • hola

    >>¿existirá otra forma de lograr esto pero más rápido?

    como mides la lentitud ? ademas que volumen de mail estas procesando?

    ademas cual es el proceso lento, el recorrer los mail o el procesar el xml que esta como attach ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 18 de octubre de 2015 4:38
  • Hola Leandro, te cuento que hice unas pruebas y estos son los resultados:

    Cantidad de correos leídos: 8 (3 de ellos se omitieron ya que no poseen archivos adjuntos, pero igual los manda a traer, desconozco como hacer un filtro de solo mails con adjuntos en la función Search())

    Cantidad de correos procesados: 5 (Mails que sí contenían archivos adjuntos con .xml)

    Tiempo de demora: casi 8 segundos.

    ¿Donde se produce la demora?: 7 segundos aprox. en obtener los mails (con la función Search()) y 2 segundos en hacer todo el otro proceso.

    Encuentro que demora demasiado para la cantidad tan poca de mails que leo, de hecho, hice una prueba con un correo hotmail que poseo muchos mails sin archivos adjuntos, y no pudo terminar de leerlos, transcurrieron más de 3 minutos y luego me salí (y eso sólo en mandar a traer los mails con la función Search())......¿Que sugieres que haga?.. Muchas gracias. :D

    ¿No será la librería que no es buena?, ¿Que me recomiendas hacer?, desde ya muchas gracias nuevamente :D!!



    • Editado MAXDELPHI domingo, 18 de octubre de 2015 13:57
    domingo, 18 de octubre de 2015 13:54
  • hola. Como recuperas los correos electrónicos? Y los adjuntos? Acaso estas empleando los objetos de Outlook? Esos objetos son muy lentos

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 19 de octubre de 2015 7:16
    Moderador
  • hola

    te en cuenta que la operacion de obtener el attach requiere una descarga del archivo desde el servidor de mail, como si fuera un download, y eso demora

    estas usando una funcionalidad de ImapClient, la obtencion del attach requiere una descarga, a mi me parece que los tiempos que mencionas son correctos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta MAXDELPHI martes, 20 de octubre de 2015 13:45
    lunes, 19 de octubre de 2015 15:08
  • Bueno, muchas gracias a todos, entonces lo tomaré como un tiempo normal... mcuhas gracias :)
    martes, 20 de octubre de 2015 13:45