Ir para conteúdo
Fórum Script Brasil
  • 0

Enviar e-mails com perl


Marcelouco

Pergunta

Olá, pessoal!

Eu estou aqui porque desisti de criar um certo script para uma finalidade: enviar e-mails com novidades para meus usuários cadastrados.

Pois bem. Tenho um banco de dados que contém e-mails cadastrados. Como são muitos usuários cadastrados, fiquei limitado ao host onde hospedo meu site.

O plano permite que eu envie até 300 e-mails a cada hora. Caso exceda, a conta é bloqueada.

Então, o script que pensei em criar era para resolver este problema.

Eu sei mais ou menos como ele deve funcionar (isso na minha cabeça), mas não como fazer no script.

O banco tem essas colunas entre outras: Nome_User, Email_User,EnvMail.

A coluna Nome_User armazena o nome do usuário;

A coluna Email_User armazena o e-mail do usuário;

A coluna EnvMail armazena "S" ou "N". Ou seja, enviou e-mail? Sim ou Não.

Eu imagino que eu devo selecionar 300 registros no banco de dados utilizando SELECT LIMIT do mysql.

Enviar os e-mails usando o sendmail do servidor.

Para cada e-mail enviado, atualizar o banco de dados alterando a coluna EnvMail para S para cada registro.

Também sei que posso usar a função SLEEP de Perl e setar a quantidade de "segundos" equivalente a 1 hora.

Conseqüentemente repetir a seleção de mais 300 registros e refazer todo o processo.

Então eu pergunto: Como posso fazer isso?

Alguém pode me ajudar.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá, Marcelouco.

Eu fiz este script pra te dar uma idéia. Você ainda tem que testar ele. Terá que faze-lo numa BD fictiça.

#!/usr/bin/perl

use strict;
use DBI;
use Net::SMTP;

my $smtp = Net::SMTP-> new('smtp.host.com'); #Nome do servidor SMTP
   $smtp->auth("user","senha"); #Autenticação para o SMTP
my $dbh = DBI->connect("dsn", "usuario", "senha"); #Autenticação para a Base de Dados
my $sth;

for(0..9999){ #Assumindo que o limite dos registros é 9999.

    $sth = $dbh->prepare("SELECT Nome_User, Email_User, EnvMail FROM tabela WHERE EnvMail = 'N' LIMIT $_, 300");
    $sth->execute;

    while (@registro = $sth->fetchrow_array){
       $smtp->to($registro[1]);
       $smtp->data();
       $smtp->datasend("To:$registro[1] ");
       $smtp->datasend("From: remitente");
       $smtp->datasend("mensagem");
       $smtp->quit; # Email enviado com sucesso
       $sth = $dbh->do("UPDATE SET tabela SET EnvMail = 'S' WHERE Email_User = $registro[1]");
    }
    sleep 3600;
}

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,4k
    • Posts
      652,2k
×
×
  • Criar Novo...