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; }
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); } }
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); } }
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); }