Jump to content
Fórum Script Brasil
  • 0

Enviar e-mails com perl


Marcelouco

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...