Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde, após migração para trunk2 não consegui localizar mais o envio de evento (cancelamento ou carta de correção) por e-mail, antes eu fazia assim: ACBrNFe1.EnviarEmailEvento(). Agora eu associei o componente ACBrEmail ao componente ACBrNFe e após configurar as informações de e-mail no componente ACBrEmail eu consigo enviar as NFe, porém não achei algo para enviar os eventos. Agora devo enviar os eventos em separado apenas pelo componente ACBrEmail?

  • 3 semanas depois ...
Postado

Ola Régys boa tarde, estou fazendo as adaptações para o trunk2 na minha NFe, na função antiga de enviar email do evento, tinha a opção de enviar o pdf tambem, agora se eu quiser tenho que anexar tudo nessa função ACBrNFe1.EnviarEmail?

Desde ja agradeço a atenção...

Luciano...

  • Fundadores
Postado

Use a força... leia os fontes.. Veja o Demo da ACBrNFe (em Lazarus)

  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);
    CC:=TstringList.Create;
    try
      CC.Add('[email protected]'); //especifique um email válido
      CC.Add('[email protected]');    //especifique um email válido

      ACBrMail1.Host := edtSmtpHost.Text;
      ACBrMail1.Port := edtSmtpPort.Text;
      ACBrMail1.Username := edtSmtpUser.Text;
      ACBrMail1.Password := edtSmtpPass.Text;
      ACBrMail1.From := edtSmtpUser.Text;
      ACBrMail1.SetSSL := cbEmailSSL.Checked; // SSL - Conexão Segura
      ACBrMail1.SetTLS := cbEmailSSL.Checked; // Auto TLS
      ACBrMail1.ReadingConfirmation := False; //Pede confirmação de leitura do email
      ACBrMail1.UseThread := False;           //Aguarda Envio do Email(não usa thread)
      ACBrMail1.FromName := 'Projeto ACBr - ACBrNFe';

      ACBrNFe1.NotasFiscais.Items[0].EnviarEmail( Para, edtEmailAssunto.Text,
                                               mmEmailMsg.Lines
                                               , True  // Enviar PDF junto
                                               , CC    // Lista com emails que serão enviado cópias - TStrings
                                               , nil); // Lista de anexos - TStrings
    finally
      CC.Free;
    end;

 

  • 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.

Postado

Ola Daniel boa noite, obrigado pela dica ai, mas eu ja tinha visto isso, e o envio do email da NFe ja esta OK, é que eu usava tbem o envio dos eventos por email com essa função, " ACBrNFe1.EnviarEmailEvento" e agora na nova função que seria " ACBrNFe1.EnviarEmail" não me da a opção gerarPDF, blz.

Desde ja agradeço a atenção, bom fim de semana...

Luciano...

  • Fundadores
Postado

Humm.. então talvez seja o caso de ajustar os fontes do Trunk2... (tem alguns métodos que ficaram comentados no final da Unit... para estudo posterior)

Gostaria de propor alguma alteração nos fontes ?

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.

Postado

Ola Daniel bom dia, seria legal ter a opção GerarPDF, ou só criaria a opção de GerarPDF na função atual, ou ativar a antiga "ACBrNFe1.EnviarEmailEvento", logico deixando apenas os parametros necessarios né. Ai vocês vejam o que seria melhor.

Desde ja muito obrigado....

Luciano

  • Fundadores
Postado

Não estou com tempo para analisar isso no momento... Digo, não está na minha agenda implementar isso... então se se desejar sugerir melhorias para os fontes, posso analisá-las...

  • 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.

  • 1 mês depois ...
  • Membros Pro
Postado

Boa tarde, 

Alguém conseguiu fazer o envio do e-mail utilizando a thread?

Quando passo o usothread := True, ocorre erro no procedimento abaixo:

Function TMimeMess.AddPartHTMLBinary(const Stream: TStream; const FileName, Cid: string; const PartParent: TMimePart): TMimepart;
begin
  Result := AddPart(PartParent);
  Result.DecodedLines.LoadFromStream(Stream);
  Result.MimeTypeFromExt(FileName);
  Result.Description := 'Included file: ' + FileName;
  Result.Disposition := 'inline';
  Result.ContentID := Cid;
  Result.FileName := FileName;
  Result.EncodingCode := ME_BASE64;
  Result.EncodePart; <== O ERRO OCORRE AQUI
  Result.EncodePartHeader;
end;

  • Membros Pro
Postado (editado)

Daniel,

Após acompanhar depurar o código vi que quando tem o PDF junto, no procedimento abaiixo fica travado:

function TMimeMess.AddPartHTMLBinaryFromFile(const FileName, Cid: string; const PartParent: TMimePart): TMimepart;
var
  tmp: TMemoryStream;
begin
  tmp := TMemoryStream.Create;
  try
    tmp.LoadFromFile(FileName); <== AQUI SIMPLESMENTE TRAVA
    Result :=AddPartHTMLBinary(tmp, ExtractFileName(FileName), Cid, PartParent);
  finally
    tmp.Free;
  end;
end;

Se tento enviar somente o XML ocorre  o erro: raised exception class $C0000005 with message 'access violation at 0x00000000: read of address 0x00000000'. Nesse procedimento:

for vAttempts := 1 to fAttempts do
  begin
    if fSMTP.Login then <== AQUI
      Break;
    if vAttempts >= fAttempts then
      SmtpError('SMTP Error: Unable to Login.');
  end;

O fato é que deixando a opção de uso da thread como false funciona. (Antes de atualizar para o trunk2 funcionava certinho com o uso da thread).

 

 

 

 

Editado por Paulo Alexandre Hostert
  • Membros Pro
Postado

Sim, o ACBrMail é criado em tempo de execução.

Vou criar o projeto para tentar reproduzir o problema...

Daniel, acabei de identificar o problema.

Comentei a parte onde destruo o componente ACBrMail funcionou. (Durante a execução da thread deve fazer alguma referencia..)

Agora vou ter que avaliar para ajustar isso, já que também estou criando em runtime.

Obrigado!

  • Membros Pro
Postado

Daniel,

Ainda sobre o uso da thread, quando ocorre algum erro no envio, como como algum erro nas informações de SMTP, a segunda vez que faço o envio do e-mail, no mesmo objeto acbrmail ocorre a seguinte mensagem:  Cannot terminate an externally created thread. 
 

Sabe o que é?

 

  • Membros Pro
Postado

Daniel,

Resolvi o problema fazendo alguns ajustes na unit acbrmail, na thread para tratamento do erro:

Podemos ajustar isso no padrão?

{ TACBrThread }

constructor TACBrThread.Create(AOwner: TComponent);
begin
  FreeOnTerminate := True;
  fOwner          := AOwner;

  inherited Create(False);
end;

procedure TACBrThread.DoHandleException;
begin
  Application.ShowException(FException);
end;

procedure TACBrThread.Execute;
begin
  try
    if (not terminated) then
      TACBrMail(FOwner).SendMail;
  except
    HandleException;
  end;
end;

procedure TACBrThread.HandleException;
begin
  FException := Exception(ExceptObject);
  try
    Synchronize(DoHandleException);
  finally
    FException := nil;
  end;
end;

  • Fundadores
Postado

A Thread poderia chamar um "call-back" ou evento... poderíamos usar algum evento do ACBrMail, para passar o erro... nesse caso, caberia a aplicação programar o evento, e decidir o que fazer com o erro...

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.

  • Este tópico foi criado há 3017 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...