Ejemplo n.º 1
0
        public List <CorreoDTO> leerCorreo(CuentaDTO cuenta)
        {
            List <CorreoDTO> listaCorreos = new List <CorreoDTO>();

            try
            {
                ServerDTO server = new ServerDTO();
                server.Id = cuenta.Server;
                server    = Server.getInstance().ObtenerServer(server);

                //Sesión
                AdminPop adminpop = new AdminPop();

                adminpop.ConectarPop(server, cuenta);


                List <MailMessage> listaMensajes = adminpop.ObtenerMensajes();

                //listaMensajes.Add(adminpop.ObtenerMensaje(30));
                //check fechas

                foreach (MailMessage mensajeObtenido in listaMensajes)
                {
                    CorreoDTO correo = new CorreoDTO();
                    correo.IdCuenta = cuenta.IdCuenta;

                    OrigenDestinoDTO        od            = new OrigenDestinoDTO();
                    List <OrigenDestinoDTO> listaOrigenes = new List <OrigenDestinoDTO>();

                    od.Direccion         = PasajeCorreos.getInstance().obtenerCorreoBlank(mensajeObtenido.From.ToString());
                    od.Cco               = false;
                    od.Cc                = false;
                    correo.OrigenDestino = listaOrigenes;
                    correo.OrigenDestino.Add(od);

                    MailAddressCollection listaCC = mensajeObtenido.CC;

                    if (listaCC != null)
                    {
                        foreach (MailAddress ma in listaCC)
                        {
                            OrigenDestinoDTO ccdir = new OrigenDestinoDTO();
                            ccdir.Direccion = PasajeCorreos.getInstance().obtenerCorreoBlank(ma.ToString());
                            ccdir.Cc        = true;
                            ccdir.Cco       = false;
                            correo.OrigenDestino.Add(ccdir);
                        }
                    }

                    AttachmentCollection coleccionadjuntos = mensajeObtenido.Attachments;
                    List <AttachmentDTO> adjuntos          = new List <AttachmentDTO>();

                    if (coleccionadjuntos.Count > 0)
                    {
                        //No puedo usar esto porque previamente limpié la tabla de correos, por lo tanto no hay id.
                        //int maxid = Controller.Correo.getInstance().UltimoIdCorreo(cuenta);

                        foreach (Attachment adj in coleccionadjuntos)
                        {
                            AttachmentDTO adjunto = new AttachmentDTO();

                            //adjunto.IdCorreo = maxid + 1;
                            adjunto.Name = adj.Name;
                            adjunto.Path = adj.ContentStream.ToString();        //OJO

                            adjuntos.Add(adjunto);
                        }
                    }

                    correo.Adjuntos = adjuntos;

                    //MIRAR ACA
                    string fechaStr = mensajeObtenido.Subject.Substring(mensajeObtenido.Subject.Length - 10, 10);

                    correo.Fecha = DateTime.Parse(fechaStr);


                    correo.Asunto = mensajeObtenido.Subject.Substring(0, (mensajeObtenido.Subject.Length - 10));
                    correo.NumeroServidorCorreo = mensajeObtenido.To.Count;

                    correo.Detalle = mensajeObtenido.Body;

                    correo.TipoCorreo = Tipo.RECIBIDO;
                    listaCorreos.Add(correo);
                }
            }
            catch (ArgumentNullException ex) {
            }

            return(listaCorreos);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Recibe los correos electrónicos a través de POP.
        /// Los añade a la base de datos
        /// </summary>
        private void Recibir()
        {
            try
            {
                List <CuentaDTO> listaCuentas = Cuenta.getInstance().ListarCuentas();
                nombreCuentas = new Dictionary <int, string>();

                //Solo a modo de prueba: limpio los correos de la DB y vuelvo a cargar todo.


                foreach (CuentaDTO cuentaObtenida in listaCuentas)
                {
                    nombreCuentas.Add(cuentaObtenida.IdCuenta, cuentaObtenida.User);

                    //maxcorreos = Controller.Correo.getInstance().UltimoIdCorreo(cuentaObtenida);

                    //Cuento cuántos mails hay con esa cuenta en la DB
                    int cantidadMailsDb = Controller.Correo.getInstance().CantidadCorreos(cuentaObtenida);

                    //Cuento cuántos mails hay con esa cuenta en el server pop.
                    ServerDTO servidor = new ServerDTO();
                    servidor.Id = cuentaObtenida.Server;
                    servidor    = Controller.Server.getInstance().ObtenerServer(servidor);
                    AdminPop adminpop = new AdminPop();
                    adminpop.ConectarPop(servidor, cuentaObtenida);
                    int cantidadMailsPop = adminpop.ObtenerCantidadMensajes();

                    //Si DB < POP
                    if (cantidadMailsDb < cantidadMailsPop && cantidadMailsDb != 0)
                    {
                        //Por cada correo obtenido:
                        List <CorreoDTO> listaCorreosDb = Controller.Correo.getInstance().listar(false, false, cuentaObtenida);
                        //Borrar su OrigenDestino
                        //Borrar su Adjunto
                        //Borrar el correo
                        foreach (CorreoDTO correo in listaCorreosDb)
                        {
                            Controller.Correo.getInstance().eliminarCorreo(correo);
                        }

                        //Obtengo lista de mails de POP
                        List <CorreoDTO> listaCorreos = Correo.MailServer.getInstance().leerCorreo(cuentaObtenida);
                        foreach (CorreoDTO correo in listaCorreos)
                        {
                            //Agrego mail
                            //Agrego OrigenDestino
                            //Agrego Adjunto
                            Controller.Correo.getInstance().agregarCorreo(correo);
                        }
                    }
                    //Si no hay correos en DB, cargar los de POP y agregarlos en DB.
                    else if (cantidadMailsDb == 0)
                    {
                        List <CorreoDTO> listaCorreos = Correo.MailServer.getInstance().leerCorreo(cuentaObtenida);
                        foreach (CorreoDTO correo in listaCorreos)
                        {
                            //Agrego mail
                            //Agrego OrigenDestino
                            //Agrego Adjunto
                            Controller.Correo.getInstance().agregarCorreo(correo);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }