Пример #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;
        }
Пример #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)
            {

            }
        }