Ir para conteúdo
  • Cadastre-se

dev botao

Erro no ACBRSAT.enviaremail


Suporte Acodi
Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 2676 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia

Tem um problema no envio dos emails ao usar o comando ACBrSAT1.EnviarEmail com a opcão ACBrMail1.UseThread:=true.

Uso o comando para enviar o CF-SAT ao cliente por email, com copia para um email da empresa como backup. Todas as vendas enviam para o email da empresa e quando o cliente faz o cadastro e informa o email o sistema envia uma copia do xml.

Quando o USETHREAD e false não tem nenhum problema, o email é enviado somente para  a empresa e o cliente da venda, mas quando coloca TRUE, o email vai acumulando os anexos e os endereços de email, sendo assim o primeiro cliente do dia recebe todas as vendas feitas ao longo do dia porque o email dele fica na relação de todas as vendas emitidas, e essa lista vai aumentando a cada venda.

Em anexo uma imagem com o email enviado onde tem todos os anexos

Acbr problema USETHREAD.JPG

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

Provavelmente o erro está do seu lado, pois o ACBrMail quando enviando por Thread faz uma cópia nova do componente, e depois mata a mesma...

procedure SendEmailByThread(MailToClone: TACBrMail);
var
  AMail: TACBrMail;
begin
  if not Assigned(MailToClone) then
    raise Exception.Create( 'MailToClone not specified' );

  AMail := TACBrMail.Create(nil);
  AMail.Assign( MailToClone );

  // Thread is FreeOnTerminate, and also will destroy "AMail"
  TACBrMailThread.Create(AMail);
end;
       

No exemplo em Lazarus, "MailTeste", o mesmo faz o disparo de 5 emails em Thread e com vários anexos, e não ocorre esse problema

Certifique-se de chamar:    ACBrMail1.Clear;    antes do inicio de cada email...

Hum... notei que "TACBrSAT.EnviarEmail", não fazia a limpeza do objeto....

Apliquei uma possível correção no SVN...

Citar

Data: 12/01/2017
-- ACBrSAT --
[-] Ajuste no método "EnviarEmail", para limpar o objeto TACBrMail antes do
    envio... (por: DSA)  

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Daniel

quando uso ACBrNFe1.NotasFiscais.Items[0].EnviarEmail com o thread true ou false não da nenhum erro.

O problema so acontece com o comando ACBrSAT1.EnviarEmail quando o parametro UseThread:=true 

Quando e FALSE não tem erro.

Copiei uma parte do codigo onde coloco o usethread false devido ao erro para mostrar a rotina

 

     if lUsaSAT then begin
        DM.ACBrMail1.UseThread:=false;  // erro ao usar thread
        try
          if cc.Count>0 then begin
            DM.ACBrSAT1.EnviarEmail(Para
                                 , Assunto
                                 , XML
                                 , Msg
                                 , CC //Lista com emails que serão enviado cópias - TStrings
                                 , Arquivos // Lista de anexos - TStrings
                                 , nil //cStream
                                 );
            end
          else begin
            DM.ACBrSAT1.EnviarEmail(Para
                                 , Assunto
                                 , XML
                                 , Msg
                                 , nil //Lista com emails que serão enviado cópias - TStrings
                                 , Arquivos // Lista de anexos - TStrings
                                 , nil //cStream
                                 );
          end;
        except
          Application.MessageBox('Não foi possível o envio do e-Mail com os dados parametrizados!'+
          ' Confira os dados no programa SGL em PARAMETROS - CONTROLE FISCAL - NF-e - e-Mail','Atenção',MB_ICONWARNING+MB_OK );
        end;
        end
      else begin
        DM.ACBrMail1.UseThread:=true;
        if ActEmailCupom.Tag=1 then begin
          DM.ACBrNFe1.DANFE:= DM.ACBrNFeDANFCeFortes1; //precisa ser no fortes para gerar o pdf
          DM.AtualizaConfigAcBr(tblNFeREDE.AsString,tblNFeLOJA.AsString);
          DM.ACBrNFe1.Configuracoes.Geral.ModeloDF:=moNFCe; //NFC-e
          end
        else if ActEmailCupom.Tag=2 then begin
          DM.ACBrNFe1.DANFE:= DM.ACBrNFeDANFeRL1;
          DM.AtualizaConfigAcBr(tblNFeREDE.AsString,tblNFeLOJA.AsString);
          DM.ACBrNFeDANFeRL1.TipoDANFE:=tiRetrato;
          DM.ACBrNFe1.Configuracoes.Geral.ModeloDF:=moNFe; //NFC-e
        end;
        DM.ACBrNFe1.NotasFiscais.Clear;
        DM.ACBrNFe1.NotasFiscais.LoadFromFile(tblNFeXML.AsString);
        try
          if cc.Count>0 then begin
            DM.ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(Para
                                                     , Assunto
                                                     , Msg
                                                     , True //Enviar PDF junto
                                                     , CC //Lista com emails que serão enviado cópias - TStrings
                                                     , nil // Lista de anexos - TStrings
                                                     );
            end
          else begin
            DM.ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(Para
                                                     , Assunto
                                                     , Msg
                                                     , True //Enviar PDF junto
                                                     , nil //Lista com emails que serão enviado cópias - TStrings
                                                     , nil // Lista de anexos - TStrings
                                                     );
          end;
        except
          Application.MessageBox('Não foi possivel o envio do e-Mail com os dados parametrizados!'+
          ' Confira os dados no programa SGL em PARAMETROS - CONTROLE FISCAL - NF-e - e-Mail','Atenção',MB_ICONWARNING+MB_OK );
        end;
        if (StrToInt(DM.Procuraparametroloja('NFCe_fortes_usarfortes'))= 1) then     // precisa voltar o danfe ao escolhido na configuração
          DM.ACBrNFe1.DANFE:= DM.ACBrNFeDANFCeFortes1
        else
          DM.ACBrNFe1.DANFE:= DM.ACBrNFeDANFeESCPOS1;
      end;


 

vou atualizar os fontes e conferir, obrigado

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2676 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...