Resultados 1 a 7 de 7
  1. #1
    Wannabe
    Data de Ingresso
    Feb 2005
    Localização
    Sampa
    Posts
    815

    Enviar email + Aguardar um tempo determinado + Enviar Email

    Estou desenvolvendo um programa super bacana, o programa se conecta conecta do banco de dados do meu site, pego o id, nome e email dos usuários cadastrados e guardo dentro de um listview, e dentro de um memo eu escrevo a mensagem e manda para os usuários cadastrados do site, porem o host que hospeda o meu site tem um limite de mensagem por hora.

    A minha grande dificuldade está sendo na hora de enviar o email, eu sei enviar o email para um usuário ou colocar outros com copia, agora o que eu não estou sabendo fazer é o seguinte:

    Definir quantos emails que o programa vai enviar por conexão, ou seja eu quero que ele envie 200 emails e aguarde 01:10, depois disso ele envia outros 200 emails e assim por diante.

    Alguem sabe como posso fazer isso ?

    Gostaria de saber também maiores informações sobre thread, se alguem tiver algum material bom pra me passar !

    Abraços

  2. #2

    Re: Enviar email + Aguardar um tempo determinado + Enviar Email

    Cara vc está usando o componente IdSMTP para enviar seus emails? Caso esteja existem varias formas de se fazer essa pausa ou agilizar o envio de emails.
    Um exemplo seria o comando sleep(#) depois de mandar um IdSMTP.Send exemplo
    Código:
    label Enviar;//declare um label caso necessite
    ...
    Enviar:
    ...
    IdSMTP1.Send(IdMessage1);
    Sleep(70000) //tempo de 1:10
    if not lista.eof then
    goto Enviar:
    Ou vc pode agilizar isso fazendo uma procedure simples para enviar emails como
    Código:
    procedure EnviarEmail(email,host, senha: String; Porta: Integer);
    begin
          if SMTP1.Connected then
             SMTP1.Disconnect;
          SMTP1.Username := email;
          SMTP1.Password := senha;
          SMTP1.Host := host;
          SMTP1.Port := porta;
          IdMessage1.Clear;
          IdMessage1.ContentType := 'text/html';
          IdMessage1.Subject := 'Assunto';
          IdMessage1.From.Address := email;
          IdMessage1.Body.LoadFromFile('c:\arquivo.html');//caso tenha um template pronto
          IdMessage1.Recipients.Add.Address := Listade Endereços.Strings[I];
          try
             IdSMTP1.Connect;
             IdSMTP1.Send(IdMessage1);
          except
             ShowMessage('Falha no envio: ' + email);
          end;
    end;
    e coloca-la em um timer com o tempo que voce necessitar podendo utilizar mais de um email como no exemplo abaixo:
    Código:
       var Form1: TForm1;
            Saida: Integer; //variaveis globais
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       Saida := 1;
       Timer1.Enabled := True;//dispare o evento do timer atraves de um botão
    ...
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
       case Saida of
       1: begin Enviar('fulano@algumacoisa.net', '123456', 'smtp.algumacoisa.net', 25); Saida := 2 end;
       2: begin Enviar('beltrano@algumacoisa.net', '123456', 'smtp.algumacoisa.net', 25); Saida := 3 end;
       3: begin Enviar('sicrano@algumacoisa.net', '123456', 'smtp.algumacoisa.net', 25); Saida := 1 end;
       end;
    end;
    bom espero ter ajudado, claro que tem mais formas de enviar emails em massa, mas se for pra mandar spam me tire da sua lista ok!?!? :lol:

  3. #3
    Wannabe
    Data de Ingresso
    Feb 2005
    Localização
    Sampa
    Posts
    815

    Re: Enviar email + Aguardar um tempo determinado + Enviar Email

    Boa noite higorlpd,

    Eu tinha guardado no meu PC essa procedure, fiz algumas modificações e ela me atender, porem falta alguns itens.

    Itens que falta eu resolver:
    [*] Preciso interagir a quantidade de email enviada por determinado tempo.[*] Preciso que o sistema envie os emails que estão no ListView e quando atingir o limite de emails estipulados para o envio, aguarde o tempo estabelecido, após passar o tempo, comece enviar novamente de onde parou !

    Na teoria eu não posso enviar o código Sleep(70000) //tempo de 1:10, pois quero que o usuário determine quanto tempo ele quer esperar !

    Procedure que estou usando para enviar !

    Código:
    procedure TForm1.ConectaSMTP;
    var
     I: Integer;
    begin
    messagebody.Body.Clear;
    messagebody.From.Name:= EdtNome.Text;
    messagebody.From.Address := EdtEmail.Text;
    messagebody.Recipients.EMailAddresses := 'abobre@gmail.com';
    messagebody.Priority := mpHighest;
    messagebody.Subject := EdtAssunto.Text;
    messagebody.Body.Add(Memo1.Lines.Text);
    messagebody.ContentType := 'text/html';
    pg1.MaxValue := StrToInt(EdtQuantEmail.Text);
    pg1.Progress := 0;
    IDSMTP.Host := EdtSMTP.Text;
    IDSMTP.Username := EdtUsuario.Text;
    IDSMTP.Password := EdtSenha.Text;
    IDSMTP.AuthenticationType := atNone;
    IDSMTP.Port := 25;
    IDSMTP.Connect;
    StatusBar2.Panels[0].Text :=' Conectando com o SMTP !';
    for i:= 1 to pg1.MaxValue do
    Try
    IDsmtp.Send(messagebody);
    StatusBar2.Panels[0].Text :=' Enviando os e-mails !';
    pg1.AddProgress(1);
    Application.ProcessMessages;
    except
    IDSMTP.Disconnect;
    IDSMTP.Host := EdtSMTP.Text;
    IDSMTP.AuthenticationType := atNone;
    IDSMTP.Connect;
    try
    IDSMTP.Send(messagebody);
    except
    end;
    IDSMTP.Disconnect;
    end;
    IDsmtp.Disconnect;
    StatusBar2.Panels[0].Text :=' Email enviado com sucesso!';
    end;
    Grato pela ajuda

  4. #4
    Wannabe
    Data de Ingresso
    Nov 2008
    Posts
    450

    Re: Enviar email + Aguardar um tempo determinado + Enviar Email

    no banco de dados adiciona um campo na tabela que registrara qual o ultimo envio e ai você calcula se ja deu o intervalo ,se deu vocÊ manda


    Falows
    http://img6.imageshack.us/img6/7370/rmrf.gif
    o comando no gif foi escrito errado propositalmente para evitar que pessoas curiosas testem-o no seu sistema super seguro.

  5. #5
    Wannabe Avatar de galack
    Data de Ingresso
    Aug 2006
    Localização
    Afghanistan
    Posts
    804

    Re: Enviar email + Aguardar um tempo determinado + Enviar Email

    Grande amigo abobre...
    Hum acho que é isto,
    pela lógica penso assim..
    um timer vai ficar enviando,
    na procedure de envio ele vai trabalhar por uma variavel
    do tipo inteira global, e sempre que for iniciada vai verificar se
    a variavel esta no limite que é 200 se estiver então cancela o envio,
    volta a variavel para 0, e desabilita o timer que esta executando a procedure;
    se não estiver no limite então faz o envio e adiciona a variavel
    de contagem +1;
    em outro timer vai ligar o 1 que faz o envio a cada 70000 ou 1:10;
    É mais ou menos como isto pode ser feito manow...
    no entanto é bom analisar na prática a melhor forma para que
    seu codigo funcione bem...


    Código:
    GLOBAL
    var
    Count : Integer = 0;
    
    procedure TForm1.ConectaSMTP;
    var
    I: Integer;
    begin
     if Count = 200 then
      begin
       Count := 0;
       ShowMessage('Terminei de enviar a 200 usuários');
       Timer1.enable := False;
      end;
    messagebody.Body.Clear;
    ...
    ....
    ...
    ....
    try
    IDSMTP.Send(messagebody);
     Count := Count + 1; 
    except
    end;
    
    
    Interval 1000
    Timer1 Envia >>
    
     if Count < 200 then
    begin
     ConectaSMTP
      else
     Timer1.enable := False;
    end;
    
    Interval 70000
    Timer2 Executa >>
     if Timer1.enable = False then
       Timer1.enable := true;


    abração....

  6. #6
    Hacker Avatar de FoXxD
    Data de Ingresso
    Jun 2006
    Posts
    1.154

    Re: Enviar email + Aguardar um tempo determinado + Enviar Email

    Cara eu estava criando um programa para enviar e-mails para uma lista...
    Só falta a parte do tempo de envio e corrigir alguns bugs mas se quizer testar está aí

    Link : http://uploaded.to/?id=htdis7

    Se quizer posso compartilhar a source dele com você. Aí implementamos a parte do tempo de envio do e-mail também.

    Abraços,
    FoXxD

  7. #7
    Wannabe
    Data de Ingresso
    Feb 2005
    Localização
    Sampa
    Posts
    815

    Re: Enviar email + Aguardar um tempo determinado + Enviar Email

    Citação Postado originalmente por FoXxD
    Cara eu estava criando um programa para enviar e-mails para uma lista...
    Só falta a parte do tempo de envio e corrigir alguns bugs mas se quizer testar está aí

    Link : http://uploaded.to/?id=htdis7

    Se quizer posso compartilhar a source dele com você. Aí implementamos a parte do tempo de envio do e-mail também.

    Abraços,
    FoXxD
    O meu também só falta a parte do tempo do envio !

    De qualquer forma agradeço

Tópicos Similares

  1. Como enviar email via PHP
    Por ace_ventura no fórum Delphi
    Respostas: 34
    Último Post: 16 Jan 2010, 00:03
  2. como enviar email com .bat?
    Por pkl no fórum Perl
    Respostas: 1
    Último Post: 14 Jan 2010, 17:23
  3. Enviar Email
    Por Rahackzin no fórum Dúvidas
    Respostas: 4
    Último Post: 11 Nov 2009, 19:40
  4. Posso enviar um trojan por email?
    Por Hall no fórum Dúvidas Gerais
    Respostas: 5
    Último Post: 28 Feb 2009, 11:59

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •