protected void Page_Load(object sender, EventArgs e) { try { using (CobranzasDataContext db = new CobranzasDataContext()) { pnlOriginal.Visible = false; //try //{ // txtMensaje.InnerText = "<br/><br/><analisis>" + db.FirmaOperador(Convert.ToInt32(Request["idOperador"])); //} //catch { } if (Request["idPersona"] != null) { idPersona = Convert.ToInt32(Request["idPersona"]); Persona = db.Personas.Single(x => x.idPersona == idPersona); //txtCorreoPara.Value = Persona.Email; //txtCorreoCC.Value = String.Join(",", Persona.PersonasContacto.Select(x => x.Email)); //txtCorreoAsunto.Value = "Análisis de Antigüedad al " + DateTime.Now.AFechaMuyCorta() + " - Veconinter - (" + Persona.Codigo + ")" + Persona.Nombre; chkAnalisisAntiguedad.Checked = true; //Seguridad.Ejecutar(CrearAdjuntos); } else { chkAnalisisAntiguedad.Visible = false; } if (Request["idCorreo"] != null) { chkAnalisisAntiguedad.Checked = false; int idCorreo = Convert.ToInt32(Request["idCorreo"]); Entidades.Correos Correo = db.Correos.Single(x => x.idCorreo == idCorreo); String Encabezado = "<hr/>"; Encabezado += "Correo Original Enviado el:" + Correo.FechaCreacion + "<br/>"; Encabezado += "De: " + Correo.Remitente + "<br/>"; Encabezado += "Para: " + Correo.Destinatarios + "<br/>"; Encabezado += "CC: " + Correo.DestinatariosCopia + "<br/>"; Encabezado += "Asunto: " + Correo.Asunto + "<br/>"; Encabezado += "<br/>"; txtMensaje.InnerText += Encabezado; if (Request["Accion"] != "Reenviar") { txtCorreoPara.Value = Correo.Remitente; txtCorreoAsunto.Value = Correo.Asunto.StartsWith("Re:", StringComparison.InvariantCultureIgnoreCase) ? Correo.Asunto : "Re:" + Correo.Asunto; } else { txtCorreoAsunto.Value = Correo.Asunto.StartsWith("Rv:", StringComparison.InvariantCultureIgnoreCase) ? Correo.Asunto : "Rv:" + Correo.Asunto; } if (Correo.RutaEml == null) { //txtMensaje.InnerText += Correo.Mensaje; } if (Request["Accion"] == "ResponderTodos") { txtCorreoCC.Value = Correo.Destinatarios + ";" + Correo.DestinatariosCopia; while (txtCorreoCC.Value.StartsWith(";")) { txtCorreoCC.Value = txtCorreoCC.Value.Substring(1); } } String RutaCorreo = (@"/Temp/Correo" + idCorreo + (true ? ".html" : ".txt")); iframe.Attributes.Add("src", RutaCorreo); pnlOriginal.Visible = true; } } } catch (Exception Ex) { Ex.Registrar(); } }
private void LeerCorreo(object IdOperador) { Int32 idProcesoPersonal = idProceso; try { Int32 idOperador = (int)IdOperador; using (CobranzasDataContext db = new CobranzasDataContext()) { List <Entidades.CorreosFiltros> Filtros = db.CorreosFiltros./*Where(x => x.idOperador == idOperador).*/ ToList(); String Ruta = Parametro("RutaCorreos", db); Entidades.Operadores op = db.Operadores.Single(x => x.idOperador == idOperador); Log("Leyendo: " + op.Nombre, idProcesoPersonal, idOperador); String Servidor = (op.POP3Host ?? Parametro("POP3Host", db)); if (Servidor == null) { Log("Saltando, por no tener definido un servidor", idProcesoPersonal, idOperador); return; } Int32 Puerto = (op.POP3Port ?? Convert.ToInt32(Parametro("POP3Port", db))); Boolean SSL = op.POP3SSL ?? (Parametro("POP3SSL", db) == "1"); String Usuario = op.POP3Login; String Password = op.POP3Password; if (op.POP3Password == null) { Log("Saltando, por no tener contraseña", idProcesoPersonal, idOperador); return; } DateTime?UltimaFecha = op.UltimaFechaCorreoEntrante; using (OpenPop.Pop3.Pop3Client POP3 = new OpenPop.Pop3.Pop3Client())//Iniciando el servidor POP3; { POP3.Connect(Servidor, Puerto, SSL); POP3.Authenticate(Usuario, Password); int Count = POP3.GetMessageCount(); Int32 Inicio = Count; while (true) { OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(Inicio); if (db.Correos.Any(x => x.idOperador == idOperador && x.IdPop3 == mh.MessageId)) { break; } Inicio--; if (Inicio == 0) { break; } } Inicio++; //Inicio = UltimaFecha == null ? 1 : BuscarIdPorFecha(1, Count, POP3, UltimaFecha.Value); //Inicio -= 4; //if (Inicio < 1) Inicio = 1; Log(op.Login + " Inicio:" + Inicio + ", Total:" + Count, idProcesoPersonal, idOperador); Int32 ErroresSeguidos = 0; if (Inicio > Count) { Log("No hay correos nuevos para: " + op.Login, idProcesoPersonal, idOperador); } for (int i = Inicio; i <= Count; i++)//últimos 5 correos para verificar. { if (ErroresSeguidos == 5) { Log("Abortando Lectura de " + op.Login + " Por 5 erorres consecutivos", idProcesoPersonal, idOperador); break; } try { OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(i); /*if (UltimaFecha != null && mh.DateSent.ToLocalTime() <= UltimaFecha) * { * Log("Saltando Mensaje", idProcesoPersonal, i); * continue; * }*/ if (db.Correos.Any(x => x.idOperador == idOperador && x.IdPop3 == mh.MessageId)) { Log("Saltando Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString(), idProcesoPersonal, idOperador); continue; } Log("Leyendo Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString(), idProcesoPersonal, idOperador); OpenPop.Mime.Message m = POP3.GetMessage(i); UltimaFecha = mh.DateSent.ToLocalTime(); String idLimpio = Limpiar(mh.MessageId); String Directorio = UltimaFecha.Value.ToString("yyyyMMdd") + "\\"; String Prefijo = UltimaFecha.Value.ToString("mmss") + "_"; String RutaCompleta = Ruta + Directorio + Prefijo + idLimpio + ".eml"; Int32 idCorreoNuevo = 0; if (!File.Exists(RutaCompleta)) { Directory.CreateDirectory(Ruta + Directorio); m.Save(new FileInfo(RutaCompleta)); } Entidades.Correos Correo = new Entidades.Correos(); Correo.IdPop3 = mh.MessageId; Correo.idOperador = idOperador; Correo.Asunto = Limitar(mh.Subject, 2000); Correo.Remitente = Limitar(mh.From.Raw, 500); Correo.FechaCreacion = mh.DateSent.ToLocalTime(); Correo.Destinatarios = Limitar(String.Join(",", mh.To.Select(x => x.Raw)), 5000); Correo.DestinatariosCopia = Limitar(String.Join(",", mh.Cc.Select(x => x.Raw)), 5000); Correo.DestinatariosCopiaOculta = Limitar(String.Join(",", mh.Bcc.Select(x => x.Raw)), 5000); Correo.RutaEml = Directorio + Prefijo + idLimpio; var Personas = Filtros.Where(x => mh.From.Address.ToLower() == x.De.ToLower()).Select(x => x.idPersona); foreach (int idPersona in Personas) { Correo.Correos_Personas.Add(new Entidades.Correos_Personas() { idPersona = idPersona }); } db.Correos.InsertOnSubmit(Correo); Correo.Fecha = DateTime.Now; db.SubmitChanges(); idCorreoNuevo = Correo.idCorreo; db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, op); op.UltimaFechaCorreoEntrante = UltimaFecha; db.SubmitChanges(); Log("Leido Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString() + "#" + idCorreoNuevo, idProcesoPersonal, idOperador); ErroresSeguidos = 0; } catch (OpenPop.Pop3.Exceptions.InvalidLoginException Ex) { ErroresSeguidos++; Log("Error en Mensaje: IL Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.InvalidUseException Ex) { ErroresSeguidos++; Log("Error en Mensaje: IU Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.LoginDelayException Ex) { ErroresSeguidos++; Log("Error en Mensaje: LD Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PS Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerLockedException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PSL Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerNotAvailableException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PSNA Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopServerNotFoundException Ex) { ErroresSeguidos++; Log("Error en Mensaje: SNF Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (OpenPop.Pop3.Exceptions.PopClientException Ex) { ErroresSeguidos++; Log("Error en Mensaje: PC Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } catch (Exception Ex) { ErroresSeguidos++; Log("Error en Mensaje: Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador); } } POP3.Disconnect(); } Log("Fin Lectura: " + op.Nombre, idProcesoPersonal, idOperador); } } catch (Exception Ex) { if (Ex.Message == "Server did not accept user credentials") { try { using (CobranzasDataContext db = new CobranzasDataContext()) { db.Operadores.Single(x => x.idOperador == (Int32)IdOperador).POP3Password = null; db.SubmitChanges(); db.Avisos.InsertOnSubmit(new Entidades.Avisos { Aviso = "El servidor ha rechazado su contraseña, por favor actualice su contraseña de correo nuevamente", FechaAviso = DateTime.Now.AddMinutes(2), FechaCrea = DateTime.Now, FechaOriginal = DateTime.Now.AddMinutes(2), idOperador = (Int32)IdOperador, idOperadorCrea = 1, VecesMostrada = 0 }); db.SubmitChanges(); } } catch { } } Log("Error General: Op:" + IdOperador + ", Mensaje:" + Ex.Message, idProcesoPersonal, (int)IdOperador); } }