예제 #1
0
        /// <summary>
        /// Metodo que obtiene descarga los archivos adjuntos de
        /// los correos no leido y los marca como leido de la
        /// bandeja de entrada de Gmail
        /// </summary>
        /// <returns></returns>
        public void bandejaEntradaGmail()
        {
            while (!detenerHilo)
            {
                try
                {
                    //Se obtiene informacion de cuenta de correo
                    ManteUdoCorreos manteUdo = new ManteUdoCorreos();
                    Correo          correo   = manteUdo.Consultar();

                    string     clave = correo.Clave, usuario = correo.Cuenta;
                    ImapClient cliente = new ImapClient();

                    //Se conecta con el servidor
                    if (cliente.Connect(Mensaje.cliGmail, true))
                    {
                        //Se loguea con el usuario y la clave
                        cliente.Login(usuario, clave);

                        //Se obtiene la carpeta de bandeja de entrada
                        ImapX.Collections.FolderCollection folder = cliente.Folders;
                        ImapX.Folder buzonEntrada = cliente.Folders.Inbox;

                        //Se obtiene los mensajes no leidos
                        ImapX.Message[] mensajes = buzonEntrada.Search("UNSEEN", ImapX.Enums.MessageFetchMode.Full);

                        //Se recorren la lista de mensajes obtenidos
                        foreach (ImapX.Message mensaje in mensajes)
                        {
                            //Se obtienen los archivos adjuntos
                            foreach (var archivo in mensaje.Attachments)
                            {
                                //Se comprueba que sea un archivo xml
                                if (ValidarXmlSobre(archivo.FileName))
                                {
                                    mensaje.Seen = true;
                                    //Se descargan los archivos adjuntos
                                    archivo.Download();
                                    archivo.Save(RutasCarpetas.RutaCarpetaBandejaEntrada);
                                    string desde = mensaje.From.ToString();

                                    //Se guarda en la tabla de sobres Recibidos
                                    respuestaSobre.GenerarXML(RutasCarpetas.RutaCarpetaBandejaEntrada, archivo.FileName, desde);
                                }
                                //Se comprueba que sea un ACK
                                else if (ValidarXmlACKSobre(archivo.FileName))
                                {
                                    archivo.Download();
                                    archivo.Save(RutasCarpetas.RutaCarpetaBandejaEntrada);
                                    mensaje.Seen = true;

                                    //Obtiene datos del sobre de un ACK xml
                                    SobreTransito sobreTransito = ObtenerSobreTransito(archivo.FileName, mensaje.From.ToString());

                                    //Guarda los datos en la tabla TFEST(Sobre en transito)
                                    ManteUdoSobreTransito manteSobreTransito = new ManteUdoSobreTransito();
                                    manteSobreTransito.Almacenar(sobreTransito);
                                }
                                //else if (ValidarXmlACKCFE(archivo.FileName))
                                //{
                                //    archivo.Save(RutasCarpetas.RutaCarpetaAcuseRecibidoCertificado);
                                //    mensaje.Seen = true;

                                //    RespuestaCertificados respuestaCFE = new RespuestaCertificados();
                                //    respuestaCFE.ProcesarRespuesta(archivo.FileName, CFE.ESTipoReceptor.Receptor);

                                //}
                                //else
                                //{
                                //    archivo.Save(RutasCarpetas.RutaCarpetaConsultaEstado);
                                //    mensaje.Seen = true;

                                //    RespuestaConsultaCFE respuestaConsultaCfe = new RespuestaConsultaCFE();
                                //    SobreTransito sobreTransito = respuestaConsultaCfe.ValidarContenidoConsulta(archivo.FileName);

                                //    if (sobreTransito != null)
                                //    {
                                //        respuestaConsultaCfe.ObtenerEstadoCFE(sobreTransito.Token, sobreTransito.IdReceptor, mensaje.From.ToString(), archivo.FileName);
                                //    }
                                //}
                            }
                        }

                        //Se cierra sesion
                        cliente.Logout();
                        //Se desconecta del servidor
                        cliente.Disconnect();
                        //Se libera el objeto
                        cliente.Dispose();
                    }
                }
                catch (Exception)
                {
                    //SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("Mail/BandejaEntradaGmail/Error: " + ex.ToString());
                }

                finally

                {
                    Thread.Sleep(30000);
                }
            }
        }
        /// <summary>
        /// Request the folder structure for a specific path
        /// </summary>
        /// <param name="path">The path to search</param>
        /// <param name="commonFolders">The list of common folders to update</param>
        /// <param name="parent">The parent folder</param>
        /// <param name="isFirstLevel">if <code>true</code>, will request the subfolders of all folders found. Thsi settign depends on the current FolderTreeBrowseMode</param>
        /// <returns>A list of folders</returns>
        internal FolderCollection GetFolders(string path, CommonFolderCollection commonFolders, Folder parent = null, bool isFirstLevel = false)
        {
            var            result = new FolderCollection(this, parent);
            var            cmd    = string.Format(Capabilities.XList && !Capabilities.XGMExt1 ? ImapCommands.XList : ImapCommands.List, path, Behavior.FolderTreeBrowseMode == FolderTreeBrowseMode.Full ? "*" : "%");
            IList <string> data   = new List <string>();

            if (!SendAndReceive(cmd, ref data))
            {
                return(result);
            }

            for (var i = 0; i < data.Count - 1; i++)
            {
                var folder = Folder.Parse(data[i], ref parent, this);
                commonFolders.TryBind(ref folder);

                if (Behavior.ExamineFolders)
                {
                    folder.Examine();
                }

                if (folder.HasChildren && (isFirstLevel || Behavior.FolderTreeBrowseMode == FolderTreeBrowseMode.Full))
                {
                    folder.SubFolders = GetFolders(folder.Path + Behavior.FolderDelimeter, commonFolders, folder);
                }

                result.AddInternal(folder);
            }

            return(result);
        }