Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Boa tarde pessoa, quando instancio o componente ACBrMail e ACBrNFe uma unica vez na minha aplicação, e emito varias notas para clientes diferentes, o anexo do xml e pdf esta acumulando no email subsequentes.

Exemplo: Nota 1 para cliente x, o email vai certo, mas quando emito a nota 2 para o cliente y, o componente envia o email com a nota 1 e 2 para o cliente y

Reparei que nesse método pode dar um clear no ACBrMail para resolver o problema.

procedure TACBrDFe.EnviarEmail(sPara, sAssunto: String; sMensagem: TStrings;
  sCC: TStrings; Anexos: TStrings; StreamNFe: TStream; NomeArq: String);
var
  i : Integer;
  EMails : TStringList;
  sDelimiter : Char;
begin
  if not Assigned(MAIL) then
    raise EACBrDFeException.Create('Componente ACBrMail não associado');
  MAIL.Clear;
  EMails := TStringList.Create;
  try
    if Pos( ';', sPara) > 0 then
       sDelimiter := ';'
    else
       sDelimiter := ',';
    QuebrarLinha( sPara, EMails, '"', sDelimiter);
    for i := 0 to EMails.Count -1 do
        MAIL.AddAddress( EMails[i] );
  finally
    EMails.Free;
  end;
  MAIL.Subject := sAssunto;
  if Assigned(sMensagem) then
  begin
    MAIL.Body.Text := sMensagem.Text;
    MAIL.AltBody.Text := (StripHTML(sMensagem.Text));
  end;
  if Assigned(StreamNFe) then
    MAIL.AddAttachment(StreamNFe, NomeArq);
  if Assigned(Anexos) then
  begin
    for i := 0 to Anexos.Count - 1 do
      MAIL.AddAttachment(Anexos[i]);
  end;
  if Assigned(sCC) then
  begin
    for i := 0 to sCC.Count - 1 do
      MAIL.AddCC(sCC[i]);
  end;
  MAIL.Send;
end;

ACBrDFe.pas

  • 3 semanas depois ...
  • Membros Pro
Postado

Somente esta alteração de adicionar o MAIL.ClearAttachments não resolve completamente o problema. Resolve a questão de não acumular o anexos, mas continua acumulando os destinatários do e-mail.

Para resolver o problema adicionei também o comando MAIL.Clear; para que limpe todo os dados do e-mail. Desta forma resolveu todo o problema.

Estas correções devem ser aplicadas também na Unit ACBrBoleto.pas pois o envio de boletos por e-mail está tendo o mesmo problema, acumulando os destinatários e anexos para quando envia mais de um boleto na sequencia.

Em anexo envio as duas Units corrigidas, favor verificar para submeter estas alterações no SVN.

ACBrBoleto.pas

ACBrDFe.pas

  • Curtir 1
  • 1 ano depois...
Postado

Pessoal,

Atualizei recentemente o ACBR. A uma semana meus clientes estão relatando o problema de um cliente receber por e-mail nota de outro cliente.

Isso ocorre quando seleciona varias notas para gerar em lote.

Não fiz nada no componente, apenas atualizei.

Essa minha rotina de envio dos e-mails, depois de já ter gerado todas as notas:

          // -------------------------------------------------------------------
          // Vai Enviar os Emails
          // -------------------------------------------------------------------
          If edtEmailCopia.Text <> '' Then
            slMailCopia.Add(edtEmailCopia.Text);

          For I := 0 To ACBrNFe1.NotasFiscais.Count -1 Do
          Begin
            If dmPrincipal.cdsdMovSaida.Locate('NRODOCFISCAL', FormatFloat('000000000', ACBrNFe1.NotasFiscais.Items[I].NFe.Ide.nNF), []) Then
            Begin
              ACBrMail1.Clear;
              ACBrMail1.ClearAttachments;

              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 := True;              //Aguarda Envio do Email(não usa thread)
              ACBrMail1.FromName  := 'NFe '+edtEmitRazao.Text; // Nome do Rementente

              txtEmail     := getTxtEmail;
              sChaveAcesso := txtEmail[10];
              sChaveAcesso := StringReplace(sChaveAcesso, 'CHAVEACESSO', dmPrincipal.cdsdMovSaida.FieldByName('NROCHAVENFE').AsString, [rfReplaceAll, rfIgnoreCase]);
              txtEmail.Insert(10, sChaveAcesso);
              Try
                ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(dmPrincipal.cdsdMovSaida.FieldByName('TITEMAIL').AsString
                                                         , edtEmailAssunto.Text
                                                         , txtEmail
                                                         , True //Enviar PDF junto
                                                         , slMailCopia //Lista com emails que serão enviado cópias - TStrings
                                                         , nil); // Lista de anexos - TStrings

                memoNros.Lines.Add('E-MAIL OK: '+FormatFloat('000000000', ACBrNFe1.NotasFiscais.Items[I].NFe.Ide.nNF));
              Except
                memoNros.Lines.Add('E-MAIL ERROR: '+FormatFloat('000000000', ACBrNFe1.NotasFiscais.Items[I].NFe.Ide.nNF));
              End;
            End
            Else
            Begin
              memoNros.Lines.Add('E-MAIL ERROR: '+FormatFloat('000000000', ACBrNFe1.NotasFiscais.Items[I].NFe.Ide.nNF)+' NÃO LOCALIZADO NRO NF-E');
            End;
          End;
        End;
         

Alguma sugestão?

 

  • Moderadores
Postado
3 horas atrás, ageu disse:

ACBrNFe1.NotasFiscais.Items[0].EnviarEmail(dmPrincipal.cdsdMovSaida.FieldByName('TITEMAIL').AsString

Você está enviando sempre a primeira nota, em vez de usar a variável do loop.

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

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