Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

Promovi um intenso refactoring no TACBrMail, para corrigir alguns Bugs e outros pontos que não me agradavam...

Também revi o suporte dele a Múltiplas Threads...

Por favor atualize e teste as modificações

01/10/2015
-- ACBrMail --   (por: DSA)
[*] Assinatura do Evento "OnMailProcess" modificada, para informar o ACBrMail em
    execução como primeiro parâmetro
[+] Adicionado o Evento "OnMailException"
    procedure(const AMail: TACBrMail; const E: Exception; var ThrowIt: Boolean) of object;
[+] Adicionado o método: TACBrMail.Assign, para permitir copiar objetos TACBrMail
[+] Adicionado o método: TACBrMail.SaveToFile, para permitir salvar o email gerado
[+] Adicionado o método: TACBrMail.ClearAttachments para remover todos os anexos.
[*] Método TACBrMail.SendMail completamente reescrito, para corrigir problemas
    com Anexos e MimeParts
[-] Nomes dos anexos corrigidos, para usar o nome do Arquivo original ou o
    "NameRef" informado
[-] Envio por Thread completamente reescrito para permitir várias Threads em
    execução simultânea, com e-mails de diferente conteudo, e suporte aos Eventos

 

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

  • Membros Pro
Postado

Daniel, Ficou ótimo! Muito Obrigado!

Só mais uma duvida: Utilizo no evento OnAfterMailProcess e OnMailException, uma procedure com o código abaixo para garantir que os anexos sejam excluídos. (Senão os PDFs vão se acumulando na pasta). O problema é nesse ponto a lista de anexos(Attachments) está vazia, sabes por que?


  for I := 0 to Length(TACBrMail(Sender).Attachments)-1 do
  begin
    if FileExists(TACBrMail(Sender).Attachments.FileName) then
    DeleteFile(TACBrMail(Sender).Attachments.FileName);
  end;

 

 

  • Membros Pro
Postado

Daniel, 

Vi que os anexo estão sendo excluídos no procedimento clear abaixo. Precisamos dessa chamada aqui? 

 

procedure TACBrMail.SmtpError(const pMsgError: string);
begin
  Clear; <==
  fGetLastSmtpError := pMsgError;
  MailProcess(pmsError);
  DoException( Exception.Create(pMsgError) );
end;

  • Fundadores
Postado

humm.. em algum momento precisamos limpar as informações do componente... Caso contrário os anexos nunca seriam removidos da lista interna... e seriam enviados em todos e-mails subsequentes...

Mudei o Clear para o final... por favor atualize e teste...

[*] Ajustes para metodo Clear ser chamado apenas no final de SendMail ou SmtpError

 

 

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.

  • 4 meses depois ...
  • Fundadores
Postado
2.2 - Permaneça no assunto - Quando tiver uma dúvida diferente do assunto no tópico, poste em novo tópico. Não use algo equivalente a "aproveitando o gancho... [dúvida não relacionada com o tópico aqui]". Favor leia as regras do fórum.
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.

  • 4 meses depois ...
  • Membros Pro
Postado

Veja se te ajuda:

 

ACBrNFeObj:TACBrNFe 

ACBrNFeObj.EnviarEmailEvento(Destinatarios,
                                   Assunto,
                                   CorpoEmail,
                                   CC,
                                   Anexos);

Postado

Boa noite Paulo, estou fazendo assim, e o PDF envia mais o XML não.

    arquivo:= '110111'+Trim(CDFatura.FieldByName('CHAVE_NFE').AsString)+'01-ProcEventoNFe.xml';
    cArqXMLEvento := ACBrNFe1.Configuracoes.arquivos.PathNFe+FormatFloat('0000',anoem)+FormatFloat('00',mesem)+'\Evento\Cancelamento\'+arquivo;
    ACBrNFe1.EventoNFe.Evento.Clear;
    ACBrNFe1.EventoNFe.LerXML(cArqXMLEvento);
    CC:=TstringList.Create;
    try
      ACBrNFe1.EnviarEmailEvento(Para, TRIM(CDEMPRESA.FieldByName('ASSUNTO_EMAIL').AsString),
                                               mmEmailMsg.Lines, CC,nil);

 

  • 2 semanas depois ...
Postado (editado)

Boa tarde, alguem sabe me dizer porque o XML do evento não esta indo. Estou fazendo assim:

      arquivo:= '110111'+Trim(CDFatura.FieldByName('CHAVE_NFE').AsString)+'01-ProcEventoNFe.xml';
      cArqXMLEvento := ACBrNFe1.Configuracoes.arquivos.PathNFe+FormatFloat('0000',anoem)+FormatFloat('00',mesem)+'\Evento\Cancelamento\'+arquivo;
      ACBrNFe1.EventoNFe.Evento.Clear;
      ACBrNFe1.EventoNFe.LerXML(cArqXMLEvento);
      CC:=TstringList.Create;
      try
         ACBrNFe1.EnviarEmailEvento(Para, TRIM(CDEMPRESA.FieldByName('ASSUNTO_EMAIL').AsString),mmEmailMsg.Lines, CC,nil);

Desde já agradeço

 

 

Editado por toninho
Estou usando ACBrMail1
Postado

Toninho, acho que faltou o último parâmetro. Onde está "nil" tente enviar o arquivo. Aqui estou utilizando desta forma:

Var
  CC, Anexo, mmEmailMsg: Tstrings;
begin

  Anexo := TStringList.Create;
  Anexo.Clear;
  Anexo.Add(cArqXMLEvento);

  ACBrNFe1.EventoNFe.Evento.Clear;
  ACBrNFe1.EventoNFe.LerXML(cArqXMLEvento);
  
  ACBrNFe1.EnviarEmailEvento(Para, TRIM(CDEMPRESA.FieldByName('ASSUNTO_EMAIL').AsString),mmEmailMsg.Lines, CC, Anexo);


 

  • Curtir 1
Postado
18 horas atrás, carlos_tedex disse:

Toninho, acho que faltou o último parâmetro. Onde está "nil" tente enviar o arquivo. Aqui estou utilizando desta forma:


Var
  CC, Anexo, mmEmailMsg: Tstrings;
begin

  Anexo := TStringList.Create;
  Anexo.Clear;
  Anexo.Add(cArqXMLEvento);

  ACBrNFe1.EventoNFe.Evento.Clear;
  ACBrNFe1.EventoNFe.LerXML(cArqXMLEvento);
  
  ACBrNFe1.EnviarEmailEvento(Para, TRIM(CDEMPRESA.FieldByName('ASSUNTO_EMAIL').AsString),mmEmailMsg.Lines, CC, Anexo);

Amigo Carlos tedex valeu muito pela sua ajudo que Deus retribua gentileza.

 

  • Curtir 1
  • 1 mês depois ...
Postado (editado)
Em ‎29‎/‎09‎/‎2015 at 13:44, Paulo Alexandre Hostert disse:

Devo implementar o evento e te encaminhar?

Boa noite,

Estou com um problema no envio do XML e o PDF fiz esse código abaixo e quando envio ele criar no xml e não pegar o que foi validado pelo sefaz alquem poder mim ajuda.

procedure Tfrmnotafiscal_menu.bt_nfe_exportar1Click(Sender: TObject);
var
 Para : String;
 CC: Tstrings;
 sXML,pdf: string;
 bserv: boolean;
 StreamMemo: TMemoryStream;
 Email: TEmail;
begin
  try
    sXML := Gerar_XML;

    if FileExists(sXML) then
    begin
      frmmodulo.qrconfig.open;
      if edtSmtpHost.Text = '' then
      begin
        Application.messagebox('Favor configurar a conta de email!', 'Erro',
          mb_ok + mb_iconerror);
        exit;
      end;
      // verificar se pdf existe
    pdf:= 'C:\Inforpoint\pdf\'+ stringreplace( ExtractFileName(sXML), '-NFe.xml' , '.pdf',[rfReplaceAll, rfIgnoreCase]);
     if FileExists(pdf) then sXML := sXML + '|'+ pdf;

      qrNFE_Cliente.close;
      qrNFE_Cliente.sql.clear;
      qrNFE_Cliente.sql.add('select email from c000007');
      qrNFE_Cliente.sql.add('where codigo = ''' +
        qrnota.fieldbyname('codcliente').asstring + '''');
      qrNFE_Cliente.open;

      Para := qrNFE_Cliente.fieldbyname('Email').asstring;

      if Para = '' then
        inputbox('Email', 'Email do Cliente', '');

      if frmmodulo.qrconfig.fieldbyname('email_exige_conexao').asinteger = 1
      then
        bserv := True
      else
        bserv := False;
      email := TEmail.Create;
    end;
    //CC:=TstringList.Create;
       //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 := 'Nota e XML Referente as Compras!!!';

      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;
    Application.messagebox('Email enviado com sucesso!', 'Aviso',
          mb_ok + MB_ICONINFORMATION);
end;

 

Editado por Carlosac
erro no codigo
  • Este tópico foi criado há 3018 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.