public IList <EmailEnvio> ObterPorFiltro(EmailEnvio registro) { var query = repositorio.session.Query <EmailEnvio>(); if (registro != null) { if (!string.IsNullOrWhiteSpace(registro.Texto)) { query = query.Where(x => x.Texto.ToUpper().Contains(registro.Texto.ToUpper())); } if (!string.IsNullOrWhiteSpace(registro.Assunto)) { query = query.Where(x => x.Assunto.ToUpper().Contains(registro.Assunto.ToUpper())); } if (registro.ID > 0) { query = query.Where(x => x.ID == registro.ID); } if (registro.Uf != null) { query = query.Where(x => x.Uf != null && x.Uf.ID == registro.Uf.ID); } } return(query.ToList <EmailEnvio>()); }
public EmailEnvio RemoverEmailsGerados(EmailEnvio email) { var bmEmail = new BMEmail(); var emailsRemover = bmEmail.ObterPorEmailEnvio(email.ID, false); // Remove os itens já removidos bmEmailEnvio.ExcluirTodos(emailsRemover); return(email); }
private void ValidarEmailEnvio(EmailEnvio email) { if (string.IsNullOrWhiteSpace(email.Texto)) { throw new AcademicoException("Texto. Campo Obrigatório"); } if (string.IsNullOrWhiteSpace(email.Assunto)) { throw new AcademicoException("Assunto. Campo Obrigatório"); } }
public void IncluirEmailEnvio(EmailEnvio EmailEnvio) { try { this.PreencherInformacoesDeAuditoria(EmailEnvio); bmEmailEnvio.Salvar(EmailEnvio); } catch (AcademicoException ex) { throw ex; } }
private void ValidarEmailEnvioInformada(EmailEnvio EmailEnvio) { ValidarDependencias(EmailEnvio); if (string.IsNullOrWhiteSpace(EmailEnvio.Texto)) { throw new AcademicoException("Texto. Campo Obrigatório."); } if (string.IsNullOrWhiteSpace(EmailEnvio.Assunto)) { throw new AcademicoException("Assunto. Campo Obrigatório."); } }
public void AlterarEmailEnvio(EmailEnvio EmailEnvio, bool resetarEmailsNaoEnviados = false) { this.PreencherInformacoesDeAuditoria(EmailEnvio); // Retira e-mails não enviados da lista de envio if (resetarEmailsNaoEnviados) { RemoverEmailsGerados(EmailEnvio); // Coloca somente os itens enviados na lista EmailEnvio.ListaEmailsGerados = new BMEmail().ObterPorEmailEnvio(EmailEnvio.ID, true).ToList(); } bmEmailEnvio.Salvar(EmailEnvio); }
public IQueryable <Usuario> ObterUsuariosParaEnvio(EmailEnvio emailEnvio) { var bmUsuario = new BMUsuario(); var list = bmUsuario.ObterTodosIQueryable().Where(x => x.Situacao.ToLower() == "ativo"); var userIds = new List <int>(); var perfisIds = new List <int>(); var niveisIds = new List <int>(); var ufsIds = new List <int>(); var turmasIds = new List <int>(); if (emailEnvio.ListaPermissao.Any(x => x.Usuario != null)) { userIds.AddRange(emailEnvio.ListaPermissao.Where(x => x.Usuario != null).Select(x => x.ID).ToList()); } if (emailEnvio.ListaPermissao.Any(x => x.Perfil != null)) { perfisIds.AddRange( emailEnvio.ListaPermissao.Where(x => x.Perfil != null).Select(y => y.Perfil.ID).ToList()); } if (emailEnvio.ListaPermissao.Any(x => x.NivelOcupacional != null)) { niveisIds.AddRange( emailEnvio.ListaPermissao.Where(x => x.NivelOcupacional != null) .Select(y => y.NivelOcupacional.ID) .ToList()); } if (emailEnvio.ListaPermissao.Any(x => x.Uf != null)) { ufsIds.AddRange(emailEnvio.ListaPermissao.Where(x => x.Uf != null).Select(y => y.Uf.ID).ToList()); } if (emailEnvio.ListaPermissao.Any(x => x.Turma != null)) { turmasIds.AddRange(emailEnvio.ListaPermissao.Where(x => x.Turma != null).Select(y => y.Turma.ID).ToList()); } return(list.Where(u => userIds.Contains(u.ID) || u.ListaPerfil.Any(p => perfisIds.Contains(p.Perfil.ID)) || niveisIds.Contains(u.NivelOcupacional.ID) || ufsIds.Contains(u.UF.ID) || u.ListaMatriculaOferta.Any(mo => mo.MatriculaTurma.Any(mt => turmasIds.Contains(mt.Turma.ID))) )); }
/// <summary> /// Configuración del asunto y el cuerpo del mensaje a enviar /// El mensaje enviado va con la fecha del envío como control /// </summary> public void EnvioMensaje() { if (SaveSystem.LoadControl() > 0) { string asunto = Constantes.EMAIL_ASUNTO + DateTime.Now; string cuerpo = ""; for (int i = 0; i < _playerData.Length; i++) { cuerpo += Constantes.MENSAJE_TITULO_ID + _playerData[i].idPaciente + "\n" + Constantes.MENSAJE_TITULO_NOMBRE + _playerData[i].nombrePaciente + "\n" + Constantes.MENSAJE_TITULO_ENCUESTA + _playerData[i].nombreTest + "\n" + Constantes.MENSAJE_TITULO_RESULTADO + CalculaResultado.Calcula(_playerData[i].nombreTest, _playerData[i].resultados) + "\n\n"; } EmailEnvio.Envio(asunto, cuerpo); } }
public void ExcluirEmailEnvio(int idNotificacao) { try { EmailEnvio notificacao = null; if (idNotificacao > 0) { notificacao = bmEmailEnvio.ObterPorID(idNotificacao); } bmEmailEnvio.Excluir(notificacao); } catch (AcademicoException ex) { throw ex; } }
public IEnumerable <Email> ObterEmailsParaEnvio(EmailEnvio emailEnvio, bool ignorarEnviados = false) { var bmEmail = new BMEmail(); var list = bmEmail.ObterPorEmailEnvio(emailEnvio.ID, null); list = list.Where(x => x.Usuario != null && x.Usuario.Situacao.ToLower() == "ativo"); if (!ignorarEnviados) { list = list.Where(x => x.Enviado == false); } if (emailEnvio.ListaPermissao.Where(x => x.Usuario != null).Any()) { var usuarios = emailEnvio.ListaPermissao.Where(x => x.Usuario != null).Select(y => y.Usuario.ID).ToList(); list = list.Where(x => usuarios.Contains(x.Usuario.ID)); } if (emailEnvio.ListaPermissao.Where(x => x.Perfil != null).Any()) { var perfis = emailEnvio.ListaPermissao.Where(x => x.Perfil != null).Select(y => y.Perfil.ID).ToList(); list = list.Where(x => x.Usuario.ListaPerfil.Any(y => perfis.Contains(y.Perfil.ID))); } if (emailEnvio.ListaPermissao.Where(x => x.NivelOcupacional != null).Any()) { var niveiscupacionais = emailEnvio.ListaPermissao.Where(x => x.NivelOcupacional != null).Select(y => y.NivelOcupacional.ID).ToList(); list = list.Where(x => niveiscupacionais.Contains(x.Usuario.NivelOcupacional.ID)); } if (emailEnvio.ListaPermissao.Where(x => x.Uf != null).Any()) { var ufs = emailEnvio.ListaPermissao.Where(x => x.Uf != null).Select(y => y.Uf.ID).ToList(); list = list.Where(x => ufs.Contains(x.Usuario.UF.ID)); } return(list); }
public void FormatarEmailEnvioFormulario(EmailEnvio emailEnvioEdicao, int[] perfisSelecionados, int[] niveisOcupacionais, int[] ufs, int[] status, Turma turma, List <Usuario> usuarios) { var listUserIds = new List <int>(); if (usuarios.Any()) { listUserIds.AddRange(usuarios.Select(user => user.ID)); } // Se tiver turma selecionada var selectedClass = emailEnvioEdicao.ListaPermissao.FirstOrDefault(x => x.Turma != null); var hashTags = new List <Tuple <Dictionary <string, string>, int> >(); var matrTurma = selectedClass != null ? new ManterTurma().ObterTurmaPorID(selectedClass.Turma.ID).ListaMatriculas : null; if (matrTurma != null && matrTurma.Any()) { // Caso não tenha nenhum status selecionado pega todos da turma, do contrário pega somente aqueles que possuam o status buscado var matriculasTurma = matrTurma.Where( x => (!status.Any() || status.Contains((int)x.MatriculaOferta.StatusMatricula))); if (matrTurma.Any()) { foreach (var mt in matriculasTurma) { var lnk = string.Format("<a href=\"http://{0}\">{0}</a>", string.IsNullOrEmpty(mt.MatriculaOferta.LinkAcesso) ? "www.uc.sebrae.com.br" : mt.MatriculaOferta.LinkAcesso.Replace("http://", "")); var hashTag = new Dictionary <string, string> { { "#NOMETURMA", mt.Turma.Nome }, { "#NOMEOFERTA", mt.Turma.Oferta.Nome }, { "#NOME_CURSO", mt.Turma.Oferta.SolucaoEducacional.Nome }, { "#LINK_CONFIRMAR_INSCRICAO", lnk }, { "#DATA_INSCRICAO", mt.MatriculaOferta.DataSolicitacao.ToString("dd/MM/yyyy") }, { "#DATA_TERMINO", mt.DataLimite.ToString("dd/MM/yyyy") } }; var hashUsuario = new Tuple <Dictionary <string, string>, int>(hashTag, mt.MatriculaOferta.Usuario.ID); hashTags.Add(hashUsuario); } } else { throw new AcademicoException( "Nenhum usuário inscrito na turma selecionado. Favor selecionar outra."); } } var usuariosSelecionados = listUserIds.ToArray(); var manter = new ManterEmail(); manter.PublicarEmail(emailEnvioEdicao, emailEnvioEdicao.Assunto, emailEnvioEdicao.Texto, hashTags, ufs, status, niveisOcupacionais, perfisSelecionados, turma, usuariosSelecionados); }
public void Merge(EmailEnvio emailEnvio) { repositorio.FazerMerge(emailEnvio); }
/// <summary> /// Método utilizado para enviar email utilizando configurações de cada loja, /// enviando o e-mail imediatamente. /// </summary> /// <returns>true - Email enviado, false - Falha no envio do email</returns> internal static void EnviaEmail(HttpContext context, uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, params AnexoEmail[] anexos) { if (idLoja == 0) { throw new Exception("Loja não informada."); } if (String.IsNullOrEmpty(emailDestinatario)) { throw new Exception("Email do destinatário inválido."); } Loja loja = LojaDAO.Instance.GetElement(idLoja); string emailRemet = String.Empty; string servidorEmailRemet = String.Empty; string loginEmailRemet = String.Empty; string senhaEmailRemet = String.Empty; if (emailEnvio == EmailEnvio.Fiscal) { emailRemet = loja.EmailFiscal; servidorEmailRemet = loja.ServidorEmailFiscal; loginEmailRemet = loja.LoginEmailFiscal; senhaEmailRemet = loja.SenhaEmailFiscal; } else if (emailEnvio == EmailEnvio.Comercial) { emailRemet = loja.EmailComercial; servidorEmailRemet = loja.ServidorEmailComercial; loginEmailRemet = loja.LoginEmailComercial; senhaEmailRemet = loja.SenhaEmailComercial; } if (String.IsNullOrEmpty(emailRemet)) { throw new Exception("Email da loja inválido."); } if (String.IsNullOrEmpty(loginEmailRemet)) { throw new Exception("O usuário do email da loja não foi informado."); } if (String.IsNullOrEmpty(senhaEmailRemet)) { throw new Exception("A senha do email da loja não foi informado."); } if (String.IsNullOrEmpty(servidorEmailRemet)) { throw new Exception("O servidor de email da loja não foi informado."); } // Não envia o e-mail se não for possível identificar o contexto HTTP if (context == null) { throw new Exception("HttpContext não identificado."); } // Cria novo objeto MailMessage MailMessage mailMessage = new MailMessage { From = new MailAddress(emailRemet) }; // Define o remetente // Define o endereço de resposta if (!String.IsNullOrEmpty(loja.EmailContato)) { mailMessage.ReplyToList.Add(new MailAddress(loja.EmailContato)); } // Define primeiro destinatário mailMessage.To.Add(emailDestinatario); // Define assunto do e-mail mailMessage.Subject = assunto; bool temPdf = false; //48546 - Devido a correção do chamado 13132 //Ao fazer a remoção do item com a lista ainda em loop a proxima interação vai dar exceção pois o index é maior que a coleção var anexosRemover = new List <int>(); // Anexa os arquivos if (anexos != null && anexos.Length > 0) { for (int i = 0; i < anexos.Length; i++) { anexos[i].GetDados = true; anexos[i].Context = context; mailMessage.Attachments.Add(new Attachment(new MemoryStream(anexos[i].Dados), anexos[i].NomeArquivo)); // Chamado 13132. Ocorreu um problema ao enviar o e-mail da liberação para o cliente que fez com que // o anexo fosse enviado com o tamanho zerado. Por isso, incluímos a verificação abaixo que certifica // que o anexo foi recuperado, e caso não seja será incluído um registro na tabela de erro. if (mailMessage.Attachments[i] != null && mailMessage.Attachments[i].ContentStream != null && mailMessage.Attachments[i].ContentStream.Length == 0) { anexosRemover.Add(i); ErroDAO.Instance.InserirFromException("Enviar e-mail.", new Exception("Falha ao adicionar o anexo " + anexos[i].NomeArquivo + " ao e-mail.")); } if (anexos[i] != null && anexos[i].NomeArquivo != null) { temPdf = temPdf || anexos[i].NomeArquivo.ToLower().Contains(".pdf"); } } } //48546 foreach (var index in anexosRemover) { mailMessage.Attachments.RemoveAt(index); } // Seta propriedade para enviar email em html como true(verdadeiro) // Apenas se houver PDF anexado mailMessage.IsBodyHtml = temPdf; // Seta o corpo do e-mail com a estrutura HTML gravada na stringbuilder sbBody mailMessage.Body = mensagem; if (temPdf) { mailMessage.Body += "\n\nEsse e-mail contém um arquivo PDF anexado. Para visualizar o arquivo obtenha o Adobe Reader através do endereço " + "<a href=\"http://get.adobe.com/br/reader/\">http://get.adobe.com/br/reader/</a>."; } mailMessage.Body += "\n\n\nAtenção: Email gerado automaticamente via software WebGlass v" + Geral.ObtemVersao() + "."; if (String.IsNullOrEmpty(loja.EmailContato)) { mailMessage.Body += "\nFavor não responder esse e-mail."; } if (mailMessage.IsBodyHtml) { mailMessage.Body = mailMessage.Body.Replace("\n", "<br />"); } // Cria novo SmtpCliente e seta o endereço SmtpClient smtpClient = new SmtpClient(servidorEmailRemet) { Credentials = new NetworkCredential(loginEmailRemet, senhaEmailRemet) }; // Credencial para envio por SMTP Seguro (APENAS QUANDO O SERVIDOR EXIGE AUTENTICAÇÃO) if (ControleSistema.PortaEnvioEmail > 0) { smtpClient.Port = ControleSistema.PortaEnvioEmail.Value; } if (ControleSistema.AtivarSslEnvio) { smtpClient.EnableSsl = true; } else { smtpClient.EnableSsl = false; } try { // Envia a mensagem smtpClient.Send(mailMessage); } catch (Exception ex) { ErroDAO.Instance.InserirFromException("ProcessaEmail (0)", ex); throw ex; } }
/// <summary> /// Método utilizado para enviar email utilizando configurações de cada loja, /// colocando o e-mail na fila de envio. /// </summary> public static uint EnviaEmailAsync(GDASession session, uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, bool emailAdmin, params AnexoEmail[] anexos) { if (idLoja == 0) { throw new Exception("Loja não informada."); } if (string.IsNullOrEmpty(emailDestinatario)) { throw new Exception("Email do destinatário inválido."); } var emailsDestinatario = emailDestinatario.Trim().Split(';').Where(f => !string.IsNullOrEmpty(f)).Select(f => f.Trim()); uint idEmail = 0; foreach (var e in emailsDestinatario) { var email = new FilaEmail(); email.IdLoja = idLoja; email.EmailDestinatario = e; email.Assunto = assunto; email.Mensagem = mensagem; email.EmailEnvio = emailEnvio; email.DataCad = DateTime.Now; email.EmailAdmin = emailAdmin; var contador = 0; /* Chamado 57290. */ while (contador < 2) { try { idEmail = FilaEmailDAO.Instance.Insert(session, email); break; } catch { contador++; } } ; if (idEmail == 0) { idEmail = FilaEmailDAO.Instance.Insert(session, email); } if (anexos != null && anexos.Length > 0) { foreach (AnexoEmail anexo in anexos) { anexo.IdEmail = idEmail; AnexoEmailDAO.Instance.Insert(session, anexo); } } } return(idEmail); }
/// <summary> /// Método utilizado para enviar email utilizando configurações de cada loja, /// colocando o e-mail na fila de envio. /// </summary> public static uint EnviaEmailAsyncComTransacao(uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, bool emailAdmin, params AnexoEmail[] anexos) { using (var transaction = new GDATransaction()) { try { transaction.BeginTransaction(); uint idEmail = EnviaEmailAsync(transaction, idLoja, emailDestinatario, assunto, mensagem, emailEnvio, emailAdmin, anexos); transaction.Commit(); transaction.Close(); return(idEmail); } catch (Exception ex) { transaction.Rollback(); transaction.Close(); ErroDAO.Instance.InserirFromException("EnviaEmailAsync", ex); throw; } } }
/// <summary> /// /// Método utilizado para enviar email utilizando configurações de cada loja, /// colocando o e-mail na fila de envio. /// </summary> public static uint EnviaEmailAsync(uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, params AnexoEmail[] anexos) { return(EnviaEmailAsyncComTransacao(idLoja, emailDestinatario, assunto, mensagem, emailEnvio, false, anexos)); }
public IList <EmailEnvio> ObterEmailEnvioPorFiltro(EmailEnvio EmailEnvio) { return(bmEmailEnvio.ObterPorFiltro(EmailEnvio)); }
private void GerarEmailBaseEmail(IList <int> usuariosIds, string assunto, string texto, List <Tuple <Dictionary <string, string>, int> > hashTags, string cpfLogado, EmailEnvio emailEnvio) { var count = 0; var endPortal = ListaConfiguracaoSistema.FirstOrDefault(x => x.ID == (int)enumConfiguracaoSistema.EnderecoPortal)? .Registro; var endSgus = ListaConfiguracaoSistema.FirstOrDefault(x => x.ID == (int)enumConfiguracaoSistema.EnderecoSGUS)? .Registro; foreach (var u in usuariosIds) { if (emailEnvio.ListaEmailsGerados.Any(x => x.Usuario.ID == u)) { continue; } var usuario = usuarioBM.ObterPorId(u); var textoEmailUsuario = texto.Replace("#NOME_ALUNO", usuario.Nome) .Replace("#CPF", usuario.CPF) .Replace("#UF", usuario.UF.Nome) .Replace("#EMAIL", usuario.Email) .Replace("#SENHA", CriptografiaHelper.Decriptografar(usuario.Senha)) .Replace("#URL_PORTAL", endPortal) .Replace("#URL_SGUS", endSgus); if (hashTags != null) { textoEmailUsuario = hashTags.Where(x => x.Item2 == usuario.ID) .Aggregate(textoEmailUsuario, (current1, registro) => registro.Item1.Aggregate(current1, (current, item) => current.Replace(item.Key, item.Value))); } var email = new Email { DataGeracao = DateTime.Now, Assunto = assunto, TextoEmail = textoEmailUsuario, Enviado = false, Usuario = usuario, EmailEnvio = emailEnvio, Auditoria = new Auditoria(cpfLogado) }; count++; bmEmail.SalvarSemCommit(email); if (count < 300) { continue; } bmEmail.Commit(); count = 0; } bmEmail.Commit(); }
public IQueryable <Email> ObterPorEmailEnvio(EmailEnvio email) { return(bmEmail.ObterTodosIqueryable().Where(x => x.EmailEnvio.ID == email.ID)); }
public void PublicarEmail(EmailEnvio emailEnvio, string assunto, string texto, List <Tuple <Dictionary <string, string>, int> > hashTags, int[] ufs, int[] statusSelecionados, int[] niveisOcupacionais, int[] perfis, Turma turma = null, int[] usuarios = null) { var lstUf = new List <Uf>(); var ufBm = new BMUf(); if (ufs != null) { lstUf.AddRange(ufs.Select(uf => ufBm.ObterPorId(uf))); } var statusBm = new BMStatusMatricula(); var lstStatus = statusSelecionados .Where(status => statusBm.ObterPorId(status) != null) .Select(status => statusBm.ObterPorId(status)).ToList(); var lstNivel = new List <NivelOcupacional>(); var nivelBm = new BMNivelOcupacional(); if (niveisOcupacionais != null) { lstNivel.AddRange(niveisOcupacionais.Select(nivel => nivelBm.ObterPorID(nivel))); } var lstPerfil = new List <Perfil>(); var perfilBm = new BMPerfil(); if (perfis != null) { lstPerfil.AddRange(perfis.Select(perfil => perfilBm.ObterPorId(perfil))); } var lstUsuariosIds = new List <int>(); usuarioBM = new BMUsuario(); // Caso tenha algum filtro selecionado recupera os usuários filtrados if (ufs.Any() || lstStatus.Any() || lstNivel.Any() || lstPerfil.Any() || turma != null) { //var usuariosFiltrados = usuarioBM.ObterUsuariosParaEnvioEmail(lstUf, lstStatus, lstNivel, lstPerfil, turma); var statusIds = lstStatus.Select(x => x.ID).ToList(); var niveisIds = lstNivel.Select(x => x.ID).ToList(); var perfisIds = lstPerfil.Select(x => x.ID).ToList(); var usuariosFiltradosIds = new ManterUsuario().ObterTodosIQueryable() .Join(new BMUf().ObterTodosIQueryable(), u => u.UF.ID, uf => uf.ID, (usuario, uf) => new { usuario, uf }) .Join(new ManterUsuarioPerfil().ObterTodosIQueryable(), join => join.usuario.ID, usuarioPerfil => usuarioPerfil.Usuario.ID, (lastJoin, usuarioPerfil) => new { lastJoin.usuario, lastJoin.uf, usuarioPerfil }) .Join(new ManterMatriculaOferta().ObterTodosIQueryable(), join => join.usuario.ID, matricula => matricula.Usuario.ID, (lastJoin, matriculaOferta) => new { lastJoin.usuario, lastJoin.uf, lastJoin.usuarioPerfil, matriculaOferta }) .Join(new ManterMatriculaTurma().ObterTodosIQueryable(), join => join.matriculaOferta.ID, matricula => matricula.MatriculaOferta.ID, (lastJoin, matriculaTurma) => new { lastJoin.usuario, lastJoin.uf, lastJoin.usuarioPerfil, lastJoin.matriculaOferta, matriculaTurma }) .Where(x => (!ufs.Any() || ufs.Contains(x.uf.ID)) && (!statusIds.Any() || statusIds.Contains((int)x.matriculaOferta.StatusMatricula)) && (!niveisIds.Any() || niveisIds.Contains(x.usuario.NivelOcupacional.ID)) && (!perfisIds.Any() || perfisIds.Contains(x.usuarioPerfil.Perfil.ID)) && (turma == null || x.matriculaTurma.Turma.ID == turma.ID)) .Select(x => new { x.usuario.ID }) .Distinct() .ToList() .Select(x => x.ID) .ToList(); lstUsuariosIds.AddRange(usuariosFiltradosIds); } // Adiciona usuários avulsos nos filtros gerais if (usuarios != null && usuarios.Any()) { var lstUsuarioSelecionados = usuarios.Select(usuario => usuarioBM.ObterPorId(usuario)).Where(x => !lstUsuariosIds.Contains(x.ID)); lstUsuariosIds.AddRange(lstUsuarioSelecionados.Where(u => u.Ativo).Select(x => x.ID)); } var cpfLogado = usuarioBM.ObterUsuarioLogado().CPF; GerarEmailBaseEmail(lstUsuariosIds, assunto, texto, hashTags, cpfLogado, emailEnvio); }
public void Excluir(EmailEnvio EmailEnvio) { repositorio.Excluir(EmailEnvio); }
public void Salvar(EmailEnvio EmailEnvio) { ValidarEmailEnvioInformada(EmailEnvio); repositorio.Salvar(EmailEnvio); }