/// <summary> /// Busca si hay correos a enviar y los envia por prioridad, si falla el envío /// lo intenta hasta 5 veces si no lo puede enviar lo marca como fallido /// </summary> public static void EnviarCorreos(object source, ElapsedEventArgs e) { using (NotificacionesEntities entities = new NotificacionesEntities()) { while (MailController.bandera) //Mientras hayan correos a enviar { try { var mails = entities.MENSAJENUEVO.Select(p => new { p.EmailDestino, p.EmailOrigen, p.Tema, p.Mensaje, p.Prioridad, p.Intentos, p.Id }). OrderByDescending((x) => x.Prioridad).ToList();//Selecciona los correos a enviar ordenados por prioridad if (mails.Count < 1) { MailController.bandera = false; break; } //Si no hay correos a enviar se detiene var mail = mails.First(); //Obtiene el mail mas prioritario try{ server.Send(mail.EmailOrigen, mail.EmailDestino, mail.Tema, mail.Mensaje);//Envia el correo //Si se envió lo mueve a la tabla de correos enviados o fallidos y le pone estado enviado entities.MoveMessage(mail.Id, 1); }catch (SmtpFailedRecipientException) { //Si no se puede enviar //Si ya cumplió los 5 intentos lo mueve a la tabla de correos enviados o fallidos y le pone estado fallido if (mail.Intentos >= 5) { entities.MoveMessage(mail.Id, 0); } else { entities.IncrementarIntentos(mail.Id); } } //Si no lleva los 5 intentos le suma un intento }catch (DataException) { break; } } } }
public HttpResponseMessage NuevoEmail(MENSAJENUEVO email) { using (NotificacionesEntities entities = new NotificacionesEntities()) { if (ModelState.IsValid) { try{ entities.NewMessage(email.EmailOrigen, email.EmailDestino, email.Tema, email.Mensaje, 0, email.Prioridad);//Almacena la solicitud bandera = true; return(Request.CreateResponse(HttpStatusCode.OK)); }catch (DataException) { return(Request.CreateResponse(HttpStatusCode.Conflict)); } } return(Request.CreateResponse(HttpStatusCode.BadRequest)); } }