Exemplo n.º 1
0
 public ProcessamentoEmail2(ConfiguracaoContasEmails configuracaoContaEmail, MimeMessage mailMessage,
                            string userId, IEmailServico emailServico, string diretorioArquivos, IAtividadeServico servicoAtividade,
                            IEmailServico servicoEmail, List <EmailRemetenteRegra> emailsSpamFila)
 {
     _configuracaoContaEmail = configuracaoContaEmail;
     _mensagem           = mailMessage;
     _identificadorAnexo = Guid.NewGuid();
     BootStrapper.ContainerServicoLeituraEmail();
     _emailServico      = emailServico;
     _anexos            = new List <EmailAnexo>();
     _diretorioArquivos = diretorioArquivos;
     _diretorioArquivos = @"C:\Users\ptd000068\Desktop\AnexosFTP";
     _servicoEmail      = servicoEmail;
     _envolvidos        = new List <AtividadeParteEnvolvida>();
     _emailsSpamFila    = emailsSpamFila;
 }
Exemplo n.º 2
0
        public List <EmailMessage> LerEmail(ConfiguracaoContasEmails configuracaoContaEmail, Container container,
                                            IEmailServico emailServico, IConfiguracaoServico configuracaoServico, IAtividadeServico atividadeServico,
                                            IFilaServico filaServico, List <EmailRemetenteRegra> emailsSpamFila, List <Email> uIdsExistentes,
                                            string diretorioArquivos)
        {
            var dirLog = ConfigurationManager.AppSettings["DiretorioLog"];

            using (var emailClient = new Pop3Client())
            {
                emailClient.Connect(_hostname, _port, _useSsl);
                emailClient.AuthenticationMechanisms.Remove("XOAUTH2");
                emailClient.Authenticate(_username, _password);
                var emails       = new List <EmailMessage>();
                var messageCount = emailClient.GetMessageCount();
                var contador     = 0;

                for (int i = messageCount; i > 0; i--)
                {
                    if (contador > 150)
                    {
                        break;
                    }

                    contador++;
                    var message = emailClient.GetMessage(i - 1);

                    if (message.Date.DateTime < DateTime.Now.AddDays(-10))
                    {
                        continue;
                    }

                    if (message.Date.DateTime > DateTime.Now.AddHours(-3))
                    {
                        continue;
                    }

                    //var emailExistente =
                    //            uIdsExistentes.Find(
                    //                p =>
                    //                    p.MessageId == message.MessageId.Replace("<", "").Replace(">", ""));
                    //                    // &&  p.CriadoEm == message.Date.DateTime);

                    //if (emailExistente != null) continue;


                    if (message.MessageId.Replace("<", "").Replace(">", "") ==
                        "[email protected]")
                    {
                        var emailRetornado = uIdsExistentes.FirstOrDefault(x =>
                                                                           x.MessageId.Replace("<", "").Replace(">", "") ==
                                                                           message.MessageId.Replace("<", "").Replace(">", ""));

                        try
                        {
                            var processar = new ProcessamentoEmail2(configuracaoContaEmail, message, null,
                                                                    emailServico, diretorioArquivos, atividadeServico, emailServico, emailsSpamFila);
                            var retorno = processar.ProcessarEmail();
                        }
                        catch (Exception ex)
                        {
                            continue;
                        }
                    }



                    //var emailMessage = new EmailMessage
                    //{
                    //    Content = !string.IsNullOrEmpty(message.HtmlBody) ? message.HtmlBody : message.TextBody,
                    //    Subject = message.Subject
                    //};
                    //emailMessage.ToAddresses.AddRange(message.To.Select(x => (MailboxAddress)x)
                    //    .Select(x => new EmailAddress { Address = x.Address, Name = x.Name }));
                    //emailMessage.FromAddresses.AddRange(message.From.Select(x => (MailboxAddress)x)
                    //    .Select(x => new EmailAddress { Address = x.Address, Name = x.Name }));
                    //emails.Add(emailMessage);
                }

                return(emails);
            }
        }
Exemplo n.º 3
0
        private static void Run(ConfiguracaoContasEmails configuracaoContaEmail, Container container,
                                IEmailServico emailServico, IConfiguracaoServico configuracaoServico, IAtividadeServico atividadeServico,
                                IFilaServico filaServico, List <EmailRemetenteRegra> emailsSpamFila)
        {
            var dirLog = ConfigurationManager.AppSettings["DiretorioLog"];

            try
            {
                var uIdsExistentes = (List <Email>)emailServico.ObterUids(configuracaoContaEmail.Id);
                var configuracao   = new Configuracao();
                configuracao.SetarUrlEmailAnexos();
                var pathPadrao = configuracaoServico.ObterPorSigla(configuracao.Sigla);

                //using (
                //    var ic = new ImapClient(configuracaoContaEmail.ServidorPop, configuracaoContaEmail.UsuarioEmail,
                //        configuracaoContaEmail.SenhaEmail, AuthMethods.Login,
                //        configuracaoContaEmail.PortaServidorEntrada, true, true))
                //{
                //    ic.SelectMailbox("inbox");
                //    var iDiasAMenos = -3;

                //    var messages =
                //        ic.SearchMessages(
                //            new SearchCondition()
                //            {
                //                Field = SearchCondition.Fields.SentSince,
                //                Value =
                //                    DateTime.Now.AddDays(iDiasAMenos)
                //                        .ToString("dd-MMM-yyyy", new System.Globalization.CultureInfo("en-US"))
                //            }, true,
                //            false);

                //    if (!messages.Any()) return;

                //    var uIdsExistentes = (List<Email>)emailServico.ObterUids(configuracaoContaEmail.Id);
                //    var configuracao = new Configuracao();
                //    configuracao.SetarUrlEmailAnexos();
                //    var pathPadrao = configuracaoServico.ObterPorSigla(configuracao.Sigla);

                //    if (configuracaoContaEmail.FilasId != null)
                //    {
                //        var fila = filaServico.ObterPorId((int)configuracaoContaEmail.FilasId);
                //        configuracaoContaEmail.Fila = fila;
                //    }

                //    //foreach (var message in messages)
                //    //{
                //    //    try
                //    //    {
                //    //        var emailExistente =
                //    //            uIdsExistentes.Find(
                //    //                p =>
                //    //                    p.MessageId == message.Value.MessageID.Replace("<", "").Replace(">", "") &&
                //    //                    p.CriadoEm == message.Value.Date);
                //    //        if (emailExistente != null) continue;

                //    //        var messageCompleta = new MailMessage();

                //    //        try
                //    //        {
                //    //            messageCompleta = ic.GetMessage(message.Value.Uid);
                //    //        }
                //    //        catch (Exception ex)
                //    //        {
                //    //            continue;
                //    //        }

                //    //        var processar = new ProcessamentoEmail(configuracaoContaEmail, messageCompleta, null,
                //    //            emailServico, pathPadrao.Valor, atividadeServico, emailServico, emailsSpamFila);
                //    //        var retorno = processar.ProcessarEmail();

                //    //        if (retorno.IsValid)
                //    //        {
                //    //            Log.ErrorLog("ServicoLeituraEmail", dirLog,
                //    //                "E-mail (" + messageCompleta.Subject + ") processado com sucesso");
                //    //        }
                //    //        else
                //    //        {
                //    //            Log.ErrorLog("ServicoLeituraEmail", dirLog,
                //    //                "E-mail (" + messageCompleta.Subject + ") não processado, erro: " +
                //    //                retorno.Erros.ToString());
                //    //        }
                //    //    }
                //    //    catch (Exception ex)
                //    //    {
                //    //        Log.ErrorLog("ServicoLeituraEmail", dirLog,
                //    //            "E-mail (" + message.Value + ") não processado, erro: " + ex.Message);
                //    //    }
                //    //}

                //}

                new LerViaMailKit(configuracaoContaEmail.ServidorPop, configuracaoContaEmail.PortaServidorEntrada, false, configuracaoContaEmail.UsuarioEmail,
                                  configuracaoContaEmail.SenhaEmail).LerEmail(configuracaoContaEmail, container, emailServico, configuracaoServico, atividadeServico, filaServico, emailsSpamFila, uIdsExistentes, pathPadrao.Valor);
            }
            catch (Exception ex)
            {
                Log.ErrorLog("ServicoLeituraEmail", dirLog, "Erro : " + ex.Message);
            }
        }
Exemplo n.º 4
0
        public Email AdicionarEmailEntradaServico(ConfiguracaoContasEmails configuracaoContaEmail,
                                                  Email emailPai, IEnumerable <AtividadeParteEnvolvida> partesEnvolvidas, IEnumerable <EmailAnexo> anexos,
                                                  string endereco, string assunto, string html, string texto, string uIdEmail, string messageId,
                                                  DateTime criadoEm, string nomeCliente, string identificadorEmail)
        {
            var    retorno         = new Email();
            var    gerarProtocolo  = configuracaoContaEmail.Fila.GerarProtocoloNaEntradaDeEmail ?? false;
            var    criadoPorUserId = "";
            long?  atendimentoId   = null;
            string protocolo       = null;

            var usuarioAdm = _usuarioServico.ObterPorEmail("*****@*****.**");

            if (usuarioAdm != null)
            {
                criadoPorUserId = usuarioAdm.Id;
            }
            else
            {
                retorno.ValidationResult.Add(
                    new ValidationError(
                        "Não foi informado o usuario (Criado Por) e também não possui usuario padrão cadastrado ([email protected])"));
                return(retorno);
            }

            if (gerarProtocolo)
            {
                var atendimento = _atendimentoServico.AdicionarNovoAtendimento(null, criadoPorUserId, null);
                if (!atendimento.ValidationResult.IsValid)
                {
                    retorno.ValidationResult = atendimento.ValidationResult;
                    return(retorno);
                }
                atendimentoId = atendimento.Id;
                protocolo     = atendimento.Protocolo;
            }

            if (emailPai == null)
            {
                emailPai = new Email();
            }

            if (emailPai.Atividade == null)
            {
                emailPai.Atividade = new Atividade();
            }

            retorno = AdicionarEmail(criadoPorUserId, emailPai.Atividade.ResponsavelPorUserId, criadoEm,
                                     emailPai.Atividade.OcorrenciaId, emailPai.Atividade.ContratoId, atendimentoId,
                                     emailPai.Atividade.PessoasFisicasId, emailPai.Atividade.PessoasJuridicasId,
                                     emailPai.Atividade.PotenciaisClientesId, emailPai.Atividade.Id, assunto,
                                     string.Format("E-mail importado pelo serviço em {0}", DateTime.Now), endereco, html, texto, messageId,
                                     uIdEmail, "E", assunto, emailPai.Id > 0 ? emailPai.Id : (long?)null, configuracaoContaEmail.Id,
                                     (int)configuracaoContaEmail.FilasId, partesEnvolvidas, anexos, null, identificadorEmail);

            if (!retorno.ValidationResult.IsValid)
            {
                return(retorno);
            }

            var enviarEmailResposta = configuracaoContaEmail.Fila.EnviarEmailComProtocoloGerado ?? false;

            if (!enviarEmailResposta)
            {
                return(retorno);
            }
            if (!configuracaoContaEmail.Fila.EmailModeloEnvioProtocoloEmailsModeloId.HasValue)
            {
                return(retorno);
            }

            var htmlModelo =
                _emailModelServico.ObterPorId(
                    (int)configuracaoContaEmail.Fila.EmailModeloEnvioProtocoloEmailsModeloId);

            if (htmlModelo == null)
            {
                return(retorno);
            }

            html = htmlModelo.Html.Replace("[PROTOCOLO]", protocolo);
            html = html.Replace("[NOME_CLIENTE]", !string.IsNullOrEmpty(nomeCliente) ? nomeCliente : "");

            var partesEnvolvidasResposta = (from envolvido in partesEnvolvidas
                                            where envolvido.TipoParteEnvolvida == TipoParteEnvolvida.Remetente.Value
                                            select
                                            new AtividadeParteEnvolvida(envolvido.Email, envolvido.Nome, TipoParteEnvolvida.Destinatario.Value))
                                           .ToList();

            if (configuracaoContaEmail.Fila.ContaParaDisparoDeEmailConfiguracaoContasEmailsId.HasValue)
            {
                var contaDisparo =
                    _configuracaoContaEmailServico.ObterPorId(
                        (int)configuracaoContaEmail.Fila.ContaParaDisparoDeEmailConfiguracaoContasEmailsId);
                if (contaDisparo != null)
                {
                    if (contaDisparo.Id > 0)
                    {
                        partesEnvolvidasResposta.Add(new AtividadeParteEnvolvida(contaDisparo.Email,
                                                                                 contaDisparo.Descricao, TipoParteEnvolvida.Remetente.Value));
                    }
                }
            }
            else
            {
                partesEnvolvidasResposta.Add(new AtividadeParteEnvolvida(configuracaoContaEmail.Email,
                                                                         configuracaoContaEmail.Descricao, TipoParteEnvolvida.Remetente.Value));
            }

            var  filaEnvioEmailComum = _filaServico.ObterFilasPorNome("ENVIO_EMAIL_COMUM");
            long?respostaFilaId      = null;

            if (filaEnvioEmailComum.Any())
            {
                respostaFilaId = filaEnvioEmailComum.FirstOrDefault().Id;
            }

            var retornoResposta = AdicionarEmail(criadoPorUserId, null, null, null, null, atendimentoId,
                                                 emailPai.Atividade.PessoasFisicasId, emailPai.Atividade.PessoasJuridicasId,
                                                 emailPai.Atividade.PotenciaisClientesId, null, "Resposta Automatica",
                                                 string.Format("E-mail respondido pelo serviço em {0}", DateTime.Now), endereco, html, null,
                                                 null, null, "S", "Resposta Automática", null, configuracaoContaEmail.Id,
                                                 respostaFilaId.HasValue ? (int)respostaFilaId : (int)configuracaoContaEmail.FilasId,
                                                 partesEnvolvidasResposta, new List <EmailAnexo>(), null, identificadorEmail);

            return(retorno);
        }