public void ProcesarMails(object data) { if (!MailInscripcionEnProceso) { MailInscripcionEnProceso = true; try { MailEasy mail = new MailEasy(settings.smtpSettings); MailboxAddress From = new MailboxAddress(settings.inscripcion.EmisorEmailNombre, settings.inscripcion.EmisorEmailDireccion); MailboxAddress CCO = null; if (!string.IsNullOrEmpty(settings.inscripcion.CCOEmailDireccion)) { CCO = new MailboxAddress(settings.inscripcion.CCOEmailNombre, settings.inscripcion.CCOEmailDireccion); } mail.Conectar(); //Posible error de conexión a servidor de mail int EmailsEnviados = 0; int EmailsConError = 0; using (var db = new escuelapsdelsurContext()) { var alumnos = db.Alumnos.Where(x => x.Mail2 == "Enviar" || x.Mail2.StartsWith(REINTENTO)).ToList(); foreach (Alumnos alumno in alumnos) { try { /* --Contol de re-envio infinito de e-mails-- * Al grabar/cambiar el estado de envío antes del envío del e-mail, se controla * el eventual re-envio infinito de mails, si no se grabará el estado, * en caso de un error en la grabación al estado 'Enviado' * (posterior al envío exitoso del e-mail), este quedaría en 'Enviar' y * volvería a enviar el e-mail (en la próximo ciclo) incorrectamente. * Si se genera un error al grabar el estado, no enviará el email por estar en bloque try. * En el peor de los casos quedaría en un loop hasta corregir el problema de * grabación de estado, pero no de envío de e-mails. */ alumno.Mail2 = DeterminarProximoReintento(alumno.Mail2); db.SaveChanges(); //Se intenta enviar el Mail EnviarEmail(alumno, From, CCO, mail); alumno.Mail2 = "Enviado"; //Estado que toma al enviar exitosamente el envio. db.SaveChanges(); //Graba estado de envío exitoso. EmailsEnviados++; } catch (System.Exception ex) { EmailsConError++; DbContextHelper dbHelper = new DbContextHelper(db); dbHelper.entryRollback(alumno); _logger.LogError(new EventId(), ex, null); } } if (EmailsEnviados != 0 || EmailsConError != 0) { _logger.LogInformation("E-Mails de Inscripción de completado de cuestionario enviados: " + EmailsEnviados.ToString()); _logger.LogInformation("E-Mails de Inscripción de completado de cuestionario con error: " + EmailsConError.ToString()); _logger.LogInformation("----------------------------------------------------------------------"); } else { _logger.LogInformation("E-Mails de Inscripción de completado de cuestionario sin inscriptos a procesar"); } } mail.DesConectar(); } catch (System.Exception ex) { _logger.LogError(new EventId(), ex, null); //Posible error de conexión a servidor de mail } MailInscripcionEnProceso = false; } else { _logger.LogInformation("E-Mails de Inscripción de completado de cuestionario en proceso, se reintentará a próximo ciclo."); } }
public void EnviarEmail(Models.Alumnos Inscripto, MailboxAddress contactFrom, MailboxAddress contactBCC, MailEasy mail) { MailboxAddress contactTo = null; string emailaddress = Inscripto.Mail.Replace("%40", "@"); if (!settings.inscripcion.ModoTest) { contactTo = new MailboxAddress(Inscripto.Apellido + ", " + Inscripto.Nombre, emailaddress); } else { contactTo = new MailboxAddress("Test: " + Inscripto.Apellido + ", " + Inscripto.Nombre, settings.inscripcion.ReceptorTestEmailDireccion); } string mensajeAEnviar = settings.inscripcion.MensajeBienvenida; mensajeAEnviar = mensajeAEnviar.Replace("{{nombreInscripto}}", Inscripto.Nombre); BodyHtml body = new BodyHtml("Link de Inscripción", mensajeAEnviar); mail.send(contactFrom, contactTo, contactBCC, body); _logger.LogInformation("E-Mails de Inscripción enviado a: " + Inscripto.Apellido + ", " + Inscripto.Nombre + " -> " + emailaddress); }