Ir para conteúdo
  • Cadastre-se

dev botao

AcbrMail enviar varios emails de uma vez


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

Recommended Posts

crie uma lista de emails e faça um laço por exemplo:

  for IX := 0 to cNome.Items.Count -1 do
  begin
    if (Trim(mDestino.Items.Strings[IX]) <> '') then
       Mail1.AddAddress(mDestino.Items.Strings[IX],cNome.Items.Strings[IX]);
  end;

 

Olá marcotema

Obrigado pela resposta...

e se eu quiser enviar anexos, o que devo fazer?

lote de notas fiscais por exemplo.

Obrigado

Editado por Emerson Teixeira
Link para o comentário
Compartilhar em outros sites

ACBrMail1.AddAttachment();

Te aconselho a dar uma olhada no Demo do ACBrMail ele é muito completo.

Olá Regys.

boa tarde.

Sim eu olhei os fontes, inclusive vi que foi disponibilizado novo exemplo hj no trunk2.

porem acho que não me expressei corretamente.

Exemplo: quero enviar email para tres pessoas, com anexos diferente para cada uma delas (nf por exemplo),  tem como fazer isso pelo componente de uma  vez?

se tem essa função no exemplo me desculpe mais não encontrei ou não entendi.

Abraços

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você tem que compor os emails, atribuindo normalmente as propriedades e adicionado anexos...  e usar o Send...

Você pode usar o parâmetro para enviar por Thread... e com isso já partir para a montagem do próximo email... sem precisar esperar a resposta do email anterior...

Veja no Demo o Exemplo de Envio de 5 emails por Thread...

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

  • 3 meses depois ...

Realizei um teste no demo para simular um envio de 25 emails, somente alterando a variavel 'A', e notei que de 25 chegaram apenas 13 emails retornando inclusive um erro conforme anexo. Seria o caso de criar uma propriedade 'Intervalo de envio' para que dê tempo de processar o restante e não acumular causando o erro mencionado?

mailteste.png

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Sim, pode ser uma boa ideia... Mas será que resolve ?

O problema não seria pelo excesso de conexões simultâneas ?

Experimente deixar um Sleep no Loop...

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

Realmente.

Acabei de fazer o teste com 25 sem Thread e o envio ocorre naturalmente.

Teria alguma forma de limitar os itens, como um 'pacote' de e-mails, na thread?

Notei que enviando com thread = true o envio ocorre normalmente para os 13 primeiros, o restante se perde. (Estou utilizando smtp.gmail.com)

Desta forma, poderíamos criar uma propriedade de 'Quantidade por thread' para limitar isso, deixando o restante na 'fila'.

Link para o comentário
Compartilhar em outros sites

Bom dia Daniel.

Realizei o teste com 100 envios e funciona perfeitamente.

Teste realizado com Demo ACBrMail.

procedure TForm1.bEnviarLoteClick(Sender: TObject);
var
  A: Integer;
begin
  cbUsarThread.Checked := True;

  AjustaParametrosDeEnvio;

  mLog.Lines.Add('***** Iniciando envio de 100 emails por Thread *****');
  For A := 1 to 100 do
  begin
    mLog.Lines.Add('***** Enviando email: '+IntToStr(A));
    edSubject.Text := 'Teste de email: '+IntToStr(A);
    bEnviar.Click;
  end;
  mLog.Lines.Add('***** 100 emails enviados ***** ');
end;

Nada mais foi alterado.

Link para o comentário
Compartilhar em outros sites

Daniel talvez algo interessante seja alterar:

procedure TACBrBoleto.EnviarEmail(const sPara, sAssunto: String;
  sMensagem: TStrings; EnviaPDF: Boolean; sCC: TStrings; Anexos: TStrings; UsaThread : Boolean = True);

Inserindo o parametro UsaThread.

Isso até mesmo porque, no meu caso, utilizo o componente ACBrMail com o ACBrBoleto e especificamente aqui estava com problema no envio em massa.

ACBrBoleto.pas

Link para o comentário
Compartilhar em outros sites

39 minutos atrás, ws_junior disse:

Daniel talvez algo interessante seja alterar:


procedure TACBrBoleto.EnviarEmail(const sPara, sAssunto: String;
  sMensagem: TStrings; EnviaPDF: Boolean; sCC: TStrings; Anexos: TStrings; UsaThread : Boolean = True);

Inserindo o parametro UsaThread.

Isso até mesmo porque, no meu caso, utilizo o componente ACBrMail com o ACBrBoleto e especificamente aqui estava com problema no envio em massa.

Favor desconsiderar Unit anterior (erro em declaração linhas 1499 e 1500)

 

procedure TACBrBoleto.EnviarEmail(const sPara, sAssunto: String;
  sMensagem: TStrings; EnviaPDF: Boolean; sCC: TStrings; Anexos: TStrings; UsaThread : Boolean);

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por favor seja mais específico.... o que ocorre ? o que não funciona ?

É para funcionar... se temos um problema, devemos corrigi-lo e não dar uma volta sobre ele...

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

Realmente Daniel, realizei os testes novamente e a falha foi minha. 

A correção que vc aplicou com " TCriticalSection " corrigiu o problema sem necessidade de alteração em qualquer outro componente.

(Voltei a unit anterior e não me dei conta na hora de realizar os testes. Perdão pela falha!)

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

O tópico está sem movimentação a algum tempo, mas vou relatar aqui minha situação.

Dentre as várias limitações que podem ser aplicadas a um servidor de e-mail para evitar o consumo indevido, uma delas é a quantidade de vezes que um ip/usuário pode se logar ao servidor durante um tempo X (normalmente 1 minuto).

Exemplificando: preciso enviar 100 e-mails, porém o servidor está configurado para permitir que eu me logue apenas 20 vezes no servidor no prazo de 1 minuto, e que o tempo estimado para o envio de 100 emails fosse de 20 segundos. Acontece que para cada e-mail que o ACBrMail envia, ele abre uma conexão, envia, e fecha a conexão ao final do processo. Para resolver o problema de forma bem simples (gambiarra), eu poderia aplicar um intervalo no envio de cada email, porém ao invés de enviar os 100 e-mails em 20 segundos, eu precisaria de pelo menos 5 minutos.

Essa restrição existe, mas pode ser resolvida facilmente enviando todos os e-emails em uma única conexão, claro que usando thread muda um pouco, mas também é possível. Estou desenvolvendo um Gerenciador para NF-e/CT-e  onde o usuário pretende enviar muitos e-mails de uma única vez, e da forma como está funcionando o ACBrMail não consigo utiliza-lo, e terei que desenvolver uma solução própria para tal, mas estou disposto a faze-la no próprio ACBrMail para que possa ser utilizada por outros que tiverem a mesma necessidade.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Toda contribuição é sempre bem vinda ao projeto, mas é claro que todas elas também são analisadas pelos responsáveis do projeto, ache a solução para seu problema e se conseguir mantenha-a no padrão ACBr, o que levará a ter grandes possibilidades de ser adicionada ao projeto principal.

Ficamos no aguardo.

  • Curtir 2

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Olá, não consigo enviar num mesmo e-mail vários anexos.
Por exemplo, preciso enviar um e-mail para cada cliente. Em cada e-mail preciso anexar a NSF-e em pdf, o XML, a GPS e o boleto.
Às vezes, emito várias NFS-e para o mesmo cliente e preciso enviar um único e-mail com vários arquivos anexos.
Já verifiquei os exemplos, fiz testes e não encontrei uma forma.
Existe possibilidade?

Obrigado.
 

procedure enviar email.txt

Eu utilizo o componente ACBrMail. Desculpem-me. Esqueci de informar.
 

Eu utilizo o componente ACBrMail. Desculpem-me. Esqueci de informar.
 

Link para o comentário
Compartilhar em outros sites

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