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); }
/// <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) { } }