Membros Pro hugoeyng Posted September 2 Membros Pro Share Posted September 2 Olá, estou com uma dificuldade em um cliente onde o processo de envio do e-mail da NFe está levando um tempo muito fora do normal. No código fonte logo após a validação e retorno da nota eu realizo a chamada para o envio do e-mail: GravarLog('Chama enviar e-mail'); NFe.NotasFiscais.Items[vloc_Contador].EnviarEmail(vloc_MailTo, aConfiguracao.Email.Assunto + ' Série: ' + IntToStr( NFe.NotasFiscais.Items[vloc_Contador].NFe.Ide.serie ) + ' Número: ' + IntToStr( NFe.NotasFiscais.Items[vloc_Contador].NFe.Ide.nNF ), mmEmailMsg.Lines, True, // Enviar PDF junto aEmailCC, // Lista com emails que serão enviado cópias - TStrings nil); // Lista de anexos - TStrings GravarLog('Depois da chamada e-mail'); Sleep(300); GravarLog('Depois do sleep'); No log retorna o tempo antes e depois de entrar na rotina: 02/09/2024 10:50:45 Chama enviar e-mail 02/09/2024 10:51:07 Enviando Email: 02/09/2024 10:51:07 Depois da chamada de e-mail 02/09/2024 10:51:07 Depois do sleep Existe algum parâmetro ou timer que faça algum controle sobre esse comando? Li alguns tópicos antigos que tornava lento para anexar o arquivo, tem algum relato desse problema? Fico no aguardo Link to comment Share on other sites More sharing options...
Consultores Daniel InfoCotidiano Posted September 2 Consultores Share Posted September 2 Boa tarde ! vc esta utilizando componentes ? eles estao atualizados? No componente de email existe uma propriedade usarThread, habilite ela. Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link to comment Share on other sites More sharing options...
Consultores Daniel InfoCotidiano Posted September 2 Consultores Share Posted September 2 Tópico movido para a área do SAC, para que o SLA de respostas seja considerado Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 2 Author Membros Pro Share Posted September 2 11 minutos atrás, Daniel InfoCotidiano disse: Boa tarde ! vc esta utilizando componentes ? eles estao atualizados? No componente de email existe uma propriedade usarThread, habilite ela. Boa tarde, os componentes estão atualizados e já estou com o usarThread habilitado Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 3 Consultores Share Posted September 3 Boa tarde. Por favor: Consegue reduzir o escopo do problema? Ele acontece somente neste cliente em específico? Ele utiliza provedor de e-mail particular ou Gmail, HotMail e afins? Somente uma nota está sendo enviada por vez? Existem muitos destinatários, emails em cópia e cópia oculta? Se você fizer um teste em seu ambiente também ocorre o problema? Existe proxy configurado neste ambiente? Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 3 Author Membros Pro Share Posted September 3 1 hora atrás, Diego Foliene disse: Boa tarde. Por favor: Consegue reduzir o escopo do problema? Ele acontece somente neste cliente em específico? Ele utiliza provedor de e-mail particular ou Gmail, HotMail e afins? Somente uma nota está sendo enviada por vez? Existem muitos destinatários, emails em cópia e cópia oculta? Se você fizer um teste em seu ambiente também ocorre o problema? Existe proxy configurado neste ambiente? Boa tarde, a princípio estamos realizando alguns testes com algumas questões citadas. - Em princípio somente nesse cliente - Ele utilizado servidor particular - Envia uma nota por vez, mas carregamos todos o lote no componente ACBRNFe - São poucos destinatários - Com a mesma configuração não conseguimos reproduzir o ambiente, porque nosso cliente utiliza Windows Server 2008, utilizando a porta 25 no smtp. A questão do proxy reflete no envio do e-mail ou somente na comunicação com os webservices do ambiente da NFe? Caso refletir tentaremos adotar a configuração, mas a princípio ele envia o e-mail, mas tem uma demora após executar a função. Conforme avançar nossos testes, publicaremos os resultados aqui no fórum Link to comment Share on other sites More sharing options...
Consultores Alexandre de Paula Posted September 3 Consultores Share Posted September 3 10 minutos atrás, hugoeyng disse: - Com a mesma configuração não conseguimos reproduzir o ambiente, porque nosso cliente utiliza Windows Server 2008, utilizando a porta 25 no smtp. Não deveria ter relação com velocidade, mas a porta 25 não é recomendada já faz um bom tempo. Verifique a possibilidade de uma conexão mais segura com o servidor de envio de email. 2 Alexandre de Paula Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 6 Author Membros Pro Share Posted September 6 Bom dia, retornando sobre nossos testes. Eu modifiquei o fonte e monitorando(log) a rotina NotaFiscal.EnviarEmail da unit ACBrNFeNotasFiscais encontrei a seguinte situação: Alteração: if (EnviaPDF) then begin if Assigned(DANFE) then begin GravaLog('Salva PDF. Tempo: '+FormatDateTime('hh:nn:ss:zzz', Now - Inicio)); DANFE.ImprimirDANFEPDF(FNFe); AnexosEmail.Add(DANFE.ArquivoPDF); end; end; GravaLog('EnviarEmail. Tempo: '+FormatDateTime('hh:nn:ss:zzz', Now - Inicio)); - Se no componente ACBRNFe.NotaFiscais somente com um item(NF) o tempo de processo é em media 1 a 2 segundos. 09:01:44:584 - Salva PDF. Tempo: 00:00:00:000 09:01:46:237 - EnviarEmail. Tempo: 00:00:01:653 - Se no componente ACBRNFe.NotaFiscais está com mais de um item(NF) o tempo de processo é em media de 8 a 10 segundos. 08:36:10:425 - Salva PDF. Tempo: 00:00:00:000 08:36:19:244 - EnviarEmail. Tempo: 00:00:08:819 O processo de envio é entre 1 ou 2 segundos após esse anexo, normal. Não consegui identificar o porque dessa situação. Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 6 Consultores Share Posted September 6 Bom dia. 2 hours ago, hugoeyng said: - Se no componente ACBRNFe.NotaFiscais somente com um item(NF) o tempo de processo é em media 1 a 2 segundos. 09:01:44:584 - Salva PDF. Tempo: 00:00:00:000 09:01:46:237 - EnviarEmail. Tempo: 00:00:01:653 - Se no componente ACBRNFe.NotaFiscais está com mais de um item(NF) o tempo de processo é em media de 8 a 10 segundos. 08:36:10:425 - Salva PDF. Tempo: 00:00:00:000 08:36:19:244 - EnviarEmail. Tempo: 00:00:08:819 É gerado um PDF para cada NFe presente na lista, isso vai agregar no tempo total. EDIT: Perdão, o comportamento mencionado foi testando a rotina de impressão isoladamente. Fiz novo teste com a rotina de e-mail e é gerado somente um arquivo. 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 6 Author Membros Pro Share Posted September 6 51 minutos atrás, Diego Foliene disse: Bom dia. É gerado um PDF para cada NFe presente na lista, isso vai agregar no tempo total. Mas no caso estou enviando o comando NFe.NotasFiscais.Items[vloc_Contador].EnviarEmail por Item(NF). Porque geraria todos PDFs? Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 6 Consultores Share Posted September 6 4 minutes ago, hugoeyng said: Mas no caso estou enviando o comando NFe.NotasFiscais.Items[vloc_Contador].EnviarEmail por Item(NF). Porque geraria todos PDFs? Vou fazer um teste em meu ambiente para confirmar, um momento, por favor. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 6 Consultores Share Posted September 6 2 hours ago, hugoeyng said: Bom dia, retornando sobre nossos testes. Eu modifiquei o fonte e monitorando(log) a rotina NotaFiscal.EnviarEmail da unit ACBrNFeNotasFiscais encontrei a seguinte situação: Alteração: if (EnviaPDF) then begin if Assigned(DANFE) then begin GravaLog('Salva PDF. Tempo: '+FormatDateTime('hh:nn:ss:zzz', Now - Inicio)); DANFE.ImprimirDANFEPDF(FNFe); AnexosEmail.Add(DANFE.ArquivoPDF); end; end; GravaLog('EnviarEmail. Tempo: '+FormatDateTime('hh:nn:ss:zzz', Now - Inicio)); - Se no componente ACBRNFe.NotaFiscais somente com um item(NF) o tempo de processo é em media 1 a 2 segundos. 09:01:44:584 - Salva PDF. Tempo: 00:00:00:000 09:01:46:237 - EnviarEmail. Tempo: 00:00:01:653 - Se no componente ACBRNFe.NotaFiscais está com mais de um item(NF) o tempo de processo é em media de 8 a 10 segundos. 08:36:10:425 - Salva PDF. Tempo: 00:00:00:000 08:36:19:244 - EnviarEmail. Tempo: 00:00:08:819 O processo de envio é entre 1 ou 2 segundos após esse anexo, normal. Não consegui identificar o porque dessa situação. Por favor, qual é o motor de relatórios que está utilizando o Fortes ou o Fast? Pode disponibilizar o XML que está utilizando para testes? Se julgar que o mesmo tenha dados sensíveis e não possa ser disponibilizado direto aqui, envie para [email protected] com o link do tópico no corpo do e-mail para posterior identificação. Apenas para contextualizar: Modifiquei rotina do programa exemplo da NF-e deixando ela desta forma: procedure TfrmACBrNFe.btnEnviarEmailClick(Sender: TObject); var Para, Acabou: String; dtI, dtF: TDateTime; CC: Tstrings; begin Para := ''; if not(InputQuery('Enviar Email', 'Email de destino', Para)) then exit; ACBrNFe1.DANFE := ACBrNFeDANFeRL1; ACBrNFe1.NotasFiscais.Clear; while Acabou <> 'N' do begin OpenDialog1.Title := 'Selecione a NFe'; OpenDialog1.DefaultExt := '*-nfe.XML'; OpenDialog1.Filter := 'Arquivos NFe (*-nfe.XML)|*-nfe.XML|Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*'; OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Arquivos.PathSalvar; if OpenDialog1.Execute then begin //ACBrNFe1.NotasFiscais.Clear; ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName); end; (InputQuery('Adicionar mais uma nota?', 'Continuar', Acabou)); end; if ACBrNFe1.NotasFiscais.Count = 0 then exit; CC := TStringList.Create; try //CC.Add('[email protected]'); // especifique um email valido //CC.Add('[email protected]'); // especifique um email valido ConfigurarEmail; dtI := Now; ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(Para , edtEmailAssunto.Text , mmEmailMsg.Lines , True // Enviar PDF junto , CC // Lista com emails que serao enviado copias - TStrings , nil // Lista de anexos - TStrings ); dtF := Now; ShowMessage('DataI:' + FormatDateTime('hh:nn:ss:zzz', dtI) + sLineBreak + 'DataF:' + FormatDateTime('hh:nn:ss:zzz', dtF)); finally CC.Free; end; end; Fazendo um teste carregando um XML com dados fictícios que continha um item o resultado foi: Quote [Window Title] Acbrnfe_exemplo [Content] DataI:11:38:30:007 DataF:11:38:34:900 [OK] Executando a rotina novamente, mas carregando agora 4 arquivos XML o resultado foi: Quote [Window Title] Acbrnfe_exemplo [Content] DataI:11:40:36:879 DataF:11:40:41:117 [OK] Veja que em ambos os casos a diferença foi mínima. Mesmo passando só um arquivo, levou 4 segundos. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 6 Consultores Share Posted September 6 Em outro teste, modifiquei a rotina para carregar um mesmo XML de forma que o componente fica com 51 notas no count. procedure TfrmACBrNFe.btnEnviarEmailClick(Sender: TObject); var Para, Acabou: String; dtI, dtF: TDateTime; CC: Tstrings; i: Integer; begin Para := ''; if not(InputQuery('Enviar Email', 'Email de destino', Para)) then exit; ACBrNFe1.DANFE := ACBrNFeDANFeRL1; ACBrNFe1.NotasFiscais.Clear; OpenDialog1.Title := 'Selecione a NFe'; OpenDialog1.DefaultExt := '*-nfe.XML'; OpenDialog1.Filter := 'Arquivos NFe (*-nfe.XML)|*-nfe.XML|Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*'; OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Arquivos.PathSalvar; if OpenDialog1.Execute then begin for i:=0 to 50 do ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName); end; if ACBrNFe1.NotasFiscais.Count = 0 then exit; CC := TStringList.Create; try //CC.Add('[email protected]'); // especifique um email valido //CC.Add('[email protected]'); // especifique um email valido ConfigurarEmail; dtI := Now; ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(Para , edtEmailAssunto.Text , mmEmailMsg.Lines , True // Enviar PDF junto , CC // Lista com emails que serao enviado copias - TStrings , nil // Lista de anexos - TStrings ); dtF := Now; ShowMessage('DataI:' + FormatDateTime('hh:nn:ss:zzz', dtI) + sLineBreak + 'DataF:' + FormatDateTime('hh:nn:ss:zzz', dtF)); finally CC.Free; end; end; Novamente este foi meu resultado: Quote [Window Title] Acbrnfe_exemplo [Content] DataI:11:50:53:571 DataF:11:50:58:571 [OK] Todos mantendo um tempo entre 4 a 6 segundos. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 6 Author Membros Pro Share Posted September 6 2 minutos atrás, Diego Foliene disse: Em outro teste, modifiquei a rotina para carregar um mesmo XML de forma que o componente fica com 51 notas no count. procedure TfrmACBrNFe.btnEnviarEmailClick(Sender: TObject); var Para, Acabou: String; dtI, dtF: TDateTime; CC: Tstrings; i: Integer; begin Para := ''; if not(InputQuery('Enviar Email', 'Email de destino', Para)) then exit; ACBrNFe1.DANFE := ACBrNFeDANFeRL1; ACBrNFe1.NotasFiscais.Clear; OpenDialog1.Title := 'Selecione a NFe'; OpenDialog1.DefaultExt := '*-nfe.XML'; OpenDialog1.Filter := 'Arquivos NFe (*-nfe.XML)|*-nfe.XML|Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*'; OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Arquivos.PathSalvar; if OpenDialog1.Execute then begin for i:=0 to 50 do ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName); end; if ACBrNFe1.NotasFiscais.Count = 0 then exit; CC := TStringList.Create; try //CC.Add('[email protected]'); // especifique um email valido //CC.Add('[email protected]'); // especifique um email valido ConfigurarEmail; dtI := Now; ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(Para , edtEmailAssunto.Text , mmEmailMsg.Lines , True // Enviar PDF junto , CC // Lista com emails que serao enviado copias - TStrings , nil // Lista de anexos - TStrings ); dtF := Now; ShowMessage('DataI:' + FormatDateTime('hh:nn:ss:zzz', dtI) + sLineBreak + 'DataF:' + FormatDateTime('hh:nn:ss:zzz', dtF)); finally CC.Free; end; end; Novamente este foi meu resultado: Todos mantendo um tempo entre 4 a 6 segundos. Certo, nós utilizamos fastreport. Talvez seria interessante tentar executar esse seu teste no ambiente do nosso cliente, consegues encaminhá-lo para mim. Quais seriam as configurações dos componentes Email, ACBRNFe e NFEDANFEFR, no exemplo foi mantido o padrão? Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 6 Consultores Share Posted September 6 12 minutes ago, hugoeyng said: Certo, nós utilizamos fastreport. Talvez seria interessante tentar executar esse seu teste no ambiente do nosso cliente, consegues encaminhá-lo para mim. Quais seriam as configurações dos componentes Email, ACBRNFe e NFEDANFEFR, no exemplo foi mantido o padrão? Sim, as configurações foram mantidas as mesmas, apenas a rotina foi modificada. O SMTP utilizado foi o do GMail. O XML utilizado foi gerado o próprio programa exemplo também(você pode utilizar o botão GerarNFe para criar ele). Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Moderadores Juliomar Marchetti Posted September 8 Moderadores Share Posted September 8 Em 06/09/2024 at 11:56, hugoeyng disse: Certo, nós utilizamos fastreport. Talvez seria interessante tentar executar esse seu teste no ambiente do nosso cliente, consegues encaminhá-lo para mim. Quais seriam as configurações dos componentes Email, ACBRNFe e NFEDANFEFR, no exemplo foi mantido o padrão? só pra ajudar a entender, qual versão do delphi e do fast report está usando? 1 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 10 Author Membros Pro Share Posted September 10 Em 08/09/2024 at 09:37, Juliomar Marchetti disse: só pra ajudar a entender, qual versão do delphi e do fast report está usando? Estamos utilizando DELPHI 10.2.2 e FAST 5.6.8 Link to comment Share on other sites More sharing options...
Consultores Daniel InfoCotidiano Posted September 10 Consultores Share Posted September 10 Boa tarde, apenas para complementar nao encontrei acima. Chegou a testar com o programa exemplo NFe q está em nosso repositório? Outra pergunta.. ai na sua rede tem algum firewall ou servidor proxy? controle de usuarios na rede? 1 Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link to comment Share on other sites More sharing options...
Membros Pro hugoeyng Posted September 10 Author Membros Pro Share Posted September 10 1 hora atrás, Daniel InfoCotidiano disse: Boa tarde, apenas para complementar nao encontrei acima. Chegou a testar com o programa exemplo NFe q está em nosso repositório? Outra pergunta.. ai na sua rede tem algum firewall ou servidor proxy? controle de usuarios na rede? Boa tarde, eu efetuei as alterações sugeridas no programa exemplo e ele responde de maneira mais rápida. O que acho estranho é que minha implementação faz da mesma forma. A única diferença que não alimento o componente ACBRNFe com xml. Eu gero as informações, faço o processo de validar, assinar e transmitir e executo após o envio do e-mail e impressão. Tem um firewall/proxy mas que em tese não deveria influenciar porque no processo do envio propriamente dito o tempo é o mesmo do programa exemplo. Estamos adotando uma nova abordagem para criar vários lotes com somente uma NF até porque logo teremos de implementar o envio em forma síncrona. Logo que for possível testar, darei um feedback! 1 Link to comment Share on other sites More sharing options...
Recommended Posts