Пример #1
0
        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.");
            }
        }
Пример #2
0
        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);
        }