Marcelouco Postado Julho 27, 2009 Denunciar Share Postado Julho 27, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 netsoul Postado Julho 28, 2009 Denunciar Share Postado Julho 28, 2009 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marcelouco
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
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.