Enviando e-mails simples, com autenticação, com anexos e em massa em Perl
Autor/fonte: Felipe
E-mail/Url: http://www.vivaolinux.com.br/artigo/Enviando-emails-em-Perl
Tags: [ e-mail ]
Tweet
Básico: Net::SMTP
Enviando um simples e-mail com o Net::SMTP:
No lugar de "mailhost" você põe o servidor de email, exemplos:
Hotmail:
Yahoo!:
Cabeçalho:
Nome:
Usando "Dr4k3":
Autenticação (opcional):
Vamos supor que meu email seja "dr4k3@hotmail.com" e a minha senha "123456":
Destinatário:
Vamos supor que o email do c00l3r seja "c00l3r@hotmail.com", nosso código ficaria assim:
Data:
Remetente:
Um exemplo do data completo:
Corpo:
Final:
Exemplo de uma source completa:
Nova lib: /usr/lib/sendmail
Agora para nós podermos "brincar" mais com os e-mails em Perl, vamos usar um lib local dos sistemas Gnu/Linux: /usr/lib/sendmail.
Obs.: As 3 sources que vou usar não são minhas, porém vou modificá-las na explicação e deixarei igual a original na source completa.
Enviar email com anexo
Interpretador & módulos:
Cabeçalho:
Variável:
Anexo:
Enviando:
Código completo:
No caso ele simulou o backup dos arquivos de uma empresa, o que é uma ótima função para este script.
E-mails em massa com Perl
Interpretador e variáveis:
Vamos supor que minha lista de e-mails esteja em /home/dr4k3/list.txt, que meu email seja dr4k3@hotmail.com, que o assunto seja "Trabalhando com emails", que o conteúdo da mensagem esteja em /home/dr4k3/msg.html e que o programa se chame "esend" e esteja em /home/dr4k3/esend.pl.
Nossa requisição seria a seguinte:
Obs.: Caso ocorra de todos os dados estarem no mesmo local do programa, não precisa por o caminho, exemplo:
Definindo:
Abrindo mensagem & lista:
Código original:
Enviando e-mails anonimamente com Perl
Começando e definindo:
Supondo que meu servidor seja @hotmail.com, que eu vá enviar um email para c00l3r@hotmail.com, que o assunto seja "Trabalhando com emails" e que o programa esteja localizado em /home/dr4k3/sendanony.pl, nossa requisição ficaria assim:
Variáveis:
Mensagem:
Abrindo conexão:
Enviando:
Código original:
Agradecimentos:
Bom, como foi meu primeiro artigo, espero que vocês entendam e gostem, desculpem pelos erros de português e obrigado pela oportunidade.
Enviando um simples e-mail com o Net::SMTP:
#!/usr/bin/perl
use Net::SMTP;
$smtp = Net::SMTP->new('mailhost'); #esse comando vai abrir a conexão com servidor
No lugar de "mailhost" você põe o servidor de email, exemplos:
Hotmail:
$smtp = Net::SMTP->new('smtp.hotmail.com');
Yahoo!:
$smtp = Net::SMTP->new('smtp.yahoo.com');
Cabeçalho:
Nome:
$smtp->mail("user"); #aqui você vai entrar com seu nome/apelido etc
Usando "Dr4k3":
$smtp->mail("Dr4k3");
Autenticação (opcional):
$smtp->auth("user","senha"); #aqui você vai autenticar seu email
Vamos supor que meu email seja "dr4k3@hotmail.com" e a minha senha "123456":
$smtp->auth("dr4k3","123456");
Destinatário:
$smtp->to('user@hotmail.com'); #aqui você vai por o destinatário, ou seja, quem vai receber o email
Vamos supor que o email do c00l3r seja "c00l3r@hotmail.com", nosso código ficaria assim:
$smtp->to('c00l3r@hotmail.com');
Data:
$smtp->data();
$smtp->datasend("To: user@hotmail.com"); #o data é o que vai imprimir a quem foi enviado e o remetente, caso dê algum erro ou o email esteja programado para mandar mensagens automáticas
Remetente:
$smtp->datasend("From: você@hotmail.com"); # este é o remetente e o fim do cabeçalho
Um exemplo do data completo:
$smtp->data();
$smtp->datasend("To: c00l3r@hotmail.com");
$smtp->datasend("From: dr4k3@hotmail.com");
Corpo:
$smtp->datasend("Artigo trabalhando com e-mails em Perl BotecoUnix"); #Aqui vem o conteúdo do email
Final:
$smtp->quit; #aqui encerramos a conexão com servidor
Exemplo de uma source completa:
#!/usr/bin/perl
use Net::SMTP;
print q{
##############################
# Trabalhando com Emails
# usando o Net::SMTP
##############################
};
# DADOS
print 'Qual é o email Host?'; #pergunta para o usuário qual o emailhost que ele vai usar
chomp($eh = <STDIN>); #salva na memória
print 'Nome:'; #entra com o nick
chomp($name = <STDIN>);
print 'email:'; #entra com o user
chomp($mail = <STDIN>);
print 'senha:'; #entra com a senha
chomp($pass = <STDIN>);
print 'enviar para quem?:'; #entra com o destinatário
chomp($dest = <STDIN>);
print 'remetente:'; #entra com o remetente
chomp($remt = <STDIN>);
print 'Mensagem:'; #entra com o conteúdo
chomp($msg = <STDIN>);
# CONEXÃO
$smtp = Net::SMTP->new('smtp.$eh'); #abre a conexão
$smtp->mail("$name");
$smtp->auth("$mail","$pass");
$smtp->to('$dest');
$smtp->data();
$smtp->datasend("To:$dest ");
$smtp->datasend("From: remt");
$smtp->datasend("$msg");
$smtp->quit;
# FIM DA CONEXÃO
print "email enviado";
<STDIN>;
exit;
Nova lib: /usr/lib/sendmail
Agora para nós podermos "brincar" mais com os e-mails em Perl, vamos usar um lib local dos sistemas Gnu/Linux: /usr/lib/sendmail.
Obs.: As 3 sources que vou usar não são minhas, porém vou modificá-las na explicação e deixarei igual a original na source completa.
Enviar email com anexo
Interpretador & módulos:
#!/usr/bin/perl use MIME::Entity; #este é um módulo de codificação que neste script será usado com base 64
Cabeçalho:
$top = build MIME::Entity From => 'Root <root>', To => 'user@host', #aqui é o destinatário Subject => "título/assunto", #o título/assunto do email Data => $txt1; #aqui é a mensagem, que neste caso está na variável txt1
Variável:
$txt1 = “esta não é a mensagem original”; #aqui no caso seria a mensagem que o programa vai mandar
Anexo:
#Aqui começa o anexo $top->attach( Name => “nome.extensão”, #aqui você vai por o nome e a extensão do arquivo Path => “/diretório/nome.extensão”, #caminho do arquivo # Se o anexo for compactado #Type => “application/x-gtar”, #se o arquivo for compactado usará /x-gtar, perceba que o type está com um "#" antes. É porque o arquivo não está compactado, o "#" torna o comando inútil Encoding => “base64″ #a codificação do arquivo );
Enviando:
# Agente MTA do seu servidor open(MAIL,”| /usr/lib/sendmail -t”); #chama a lib citada no começo $top->print(\*MAIL); close(MAIL);
Código completo:
#!/usr/bin/perl use MIME::Entity; $txt1 = “O servidor de backup realizou o backup com sucesso,em anexo o script de backup !”; $top = build MIME::Entity From => ‘Root <root>’, To => ’suporte@domain’, Subject => “[Backup-Empresa] Confirmação do Backup “, Data => $txt1; $top->attach( Name => “algumacoisaExemplo.sh”, Path => “/diretório/algumacoisaExemplo.sh”, # Se o anexo for compactado #Type => “application/x-gtar”, Encoding => “base64″ ); open(MAIL,”| /usr/lib/sendmail -t”); $top->print(\*MAIL); close(MAIL);
No caso ele simulou o backup dos arquivos de uma empresa, o que é uma ótima função para este script.
E-mails em massa com Perl
Interpretador e variáveis:
#!/usr/local/bin/perl
$ARGC=@ARGV;
if ($ARGC !=4) { #este programa requer que os dados sejam todos postos na variável $ARGC
printf "Você deve ter digitado os comandos de forma errada\n";
printf "Veja como usar corretamente...\n";
printf "perl $0 <mailist> <remetente\@mail.com> <assunto> <corpo.html>\n";
printf "Exemplo: perl $0 lista01.txt peu\@msn.com Ola index.html\n";
exit(1);
Vamos supor que minha lista de e-mails esteja em /home/dr4k3/list.txt, que meu email seja dr4k3@hotmail.com, que o assunto seja "Trabalhando com emails", que o conteúdo da mensagem esteja em /home/dr4k3/msg.html e que o programa se chame "esend" e esteja em /home/dr4k3/esend.pl.
Nossa requisição seria a seguinte:
$ cd /home/dr4k3 $ perl esend.pl /home/dr4k3/list.txt dr4k3@hotmail.com "Trabalhando com emails" /home/dr4k3/msg.html
Obs.: Caso ocorra de todos os dados estarem no mesmo local do programa, não precisa por o caminho, exemplo:
$ cd /home/dr4k3 $ perl esend.pl listemails.txt dr4k3@hotmail.com "Trabalhando com emails" msg.html
Definindo:
$mailtype = "content-type: text/html"; $sendmail = '/usr/sbin/sendmail'; #chama a lib # aqui ele vai definir o que cada ARGV é $sender = $ARGV[1]; $subject = $ARGV[2]; $efile = $ARGV[0]; $emar = $ARGV[0];
Abrindo mensagem & lista:
open(FOO, $ARGV[3]); #aí ele vai abrir nossa mensagem que estava .html e a nossa lista de emails
@foo = <FOO>;
$corpo = join("\n", @foo);
open (BANDFIT, "$emar") || die "Can't Open $emar";
$cont=0;
while(<BANDFIT>) {
($ID,$options) = split(/\|/,$_);
chop($options);
foreach ($ID) {
$recipient = $ID;
#Enviando:
open (SENDMAIL, "| $sendmail -t"); #vai abrir a lib
print SENDMAIL "$mailtype\n";
print SENDMAIL "Subject: $subject\n";
print SENDMAIL "From: $sender\n"; # aí o programa vai usar os dados para enviar
print SENDMAIL "To: $recipient\n\n";
print SENDMAIL "$corpo\n\n";
close (SENDMAIL); #aqui vai fechar a conexão
$cont=$cont+1;
#Final:
printf "$cont Enviado para $recipient";
}
}
close(BANDFIT) #fim do programa
Código original:
#!/usr/local/bin/perl
$ARGC=@ARGV;
if ($ARGC !=4) {
printf "Você deve ter digitado os comandos de forma errada\n";
printf "Veja como usar corretamente...\n";
printf "perl $0 <mailist> <remetente\@mail.com> <assunto> <corpo.html>\n";
printf "Exemplo: perl $0 lista01.txt peu\@msn.com Ola index.html\n";
exit(1);
}
$mailtype = "content-type: text/html";
$sendmail = '/usr/sbin/sendmail';
$sender = $ARGV[1];
$subject = $ARGV[2];
$efile = $ARGV[0];
$emar = $ARGV[0];
open(FOO, $ARGV[3]);
@foo = <FOO>;
$corpo = join("\n", @foo);
open (BANDFIT, "$emar") || die "Can't Open $emar";
$cont=0;
while(<BANDFIT>) {
($ID,$options) = split(/\|/,$_);
chop($options);
foreach ($ID) {
$recipient = $ID;
open (SENDMAIL, "| $sendmail -t");
print SENDMAIL "$mailtype\n";
print SENDMAIL "Subject: $subject\n";
print SENDMAIL "From: $sender\n";
print SENDMAIL "To: $recipient\n\n";
print SENDMAIL "$corpo\n\n";
close (SENDMAIL);
$cont=$cont+1;
printf "$cont Enviado para $recipient";
}
}
close(BANDFIT);
Enviando e-mails anonimamente com Perl
Começando e definindo:
#! /usr/bin/perl
use IO::Socket;
if (!$ARGV[2]) { #este programa funciona com o mesmo mecanismo do de cima
print "Program intended to send mail anonymously\n";
print "Usage: perl anonsend.pl [server] [sender] [recepient]\n";
exit;
}
Supondo que meu servidor seja @hotmail.com, que eu vá enviar um email para c00l3r@hotmail.com, que o assunto seja "Trabalhando com emails" e que o programa esteja localizado em /home/dr4k3/sendanony.pl, nossa requisição ficaria assim:
$ cd /home/dr4k3 $ perl sendanony.pl @hotmail.com c00l3r@hotmail.com "Trabalhando com emails"
Variáveis:
#Aqui ele define as variáveis $server = $ARGV[0]; $sender = $ARGV[1]; $recpt = $ARGV[2];
Mensagem:
print "Type message to send: "; $message = <STDIN>; #aqui você digita sua mensagem, ela será armazenada na variável message
Abrindo conexão:
$remote = IO::Socket::INET->new( PeerAddr => "$server", Proto => "tcp", PeerPort => "25"); #aqui ele abre a conexão
Enviando:
#aqui ele usa os dados obtidos acima para enviar o email e da os "prints" do programa print "Connecting...\n"; sleep(1); print $remote "HELO computer\n"; sleep(1); print "Sending E-Mail Header Information\n"; print $remote "MAIL FROM: $sender\r\n"; sleep(1); print $remote "RCPT TO: $recpt\n"; sleep(1); print $remote "DATA\n"; sleep(1); print "Sending Message\n"; print $remote "$message\n"; sleep(1); print $remote ".\n"; sleep(1); print "Anonymous E-Mail Sent!\n"; exit; #fim do programa:
Código original:
#! /usr/bin/perl
# Program to connect to mail server
# and send mail to a specified user
# Pray to god this works
use IO::Socket; #tell perl to use IO *Input Output) Internet Socket
if (!$ARGV[2]) { #if nothign is entered, start this routine
print "Program intended to send mail anonymously\n"; #message to user
print "Usage: perl anonsend.pl [server] [sender] [recepient]\n"; #more message =)
exit; # finish this routine
} #end this routine
# Time to define some variables!
$server = $ARGV[0]; # what server to use to send the mail
$sender = $ARGV[1]; # who the e-mail is from
$recpt = $ARGV[2]; # who the e-mail is to
{ # start new routine
print"Type message to send: "; #asks user for message
$message = <STDIN>; # saves the input as string message
$remote = IO::Socket::INET->new( PeerAddr => "$server", Proto => "tcp", PeerPort => "25");
print "Connecting...\n"; # update user with status
sleep(1);# tells program to stop and wait
print $remote "HELO computer\n"; # telling mailserver hello
sleep(1);
print "Sending E-Mail Header Information\n"; # update user with status again
print $remote "MAIL FROM: $sender\r\n"; # Tells server who mail is spoofed from
sleep(1);
print $remote "RCPT TO: $recpt\n"; # Tells server who to send the email to
sleep(1);
print $remote "DATA\n"; # Tells server to start process off receiving our email message
sleep(1);
print "Sending Message\n"; # Update user of status again
print $remote "$message\n"; # Sends the string we entered earlier into the server
sleep(1);
print $remote ".\n"; # Tells SMTP server to stop receiving data, and send message
sleep(1);
print "Anonymous E-Mail Sent!\n"; # tells user program is finished
exit; # stop this subroutine
}
Agradecimentos:
- Web Dropz (source).
- Ninja Spy (source).
- C00L3R (pela idéia).
Bom, como foi meu primeiro artigo, espero que vocês entendam e gostem, desculpem pelos erros de português e obrigado pela oportunidade.
Enviado por xKuRt em 03/11/2008 às 12:06
Avaliação
Esta publicação ainda não foi avaliada!
A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.
Comentários
Este artigo ainda não foi comentado ou o(s) comentário(s) que foi(ram) enviado(s) a ele ainda não foi(ram) publicado(s).
Envio de comentário:
Sábado, 18 de Maio de 2013
Área restrita
Leitura recomendada
Últimas publicações
Top 5 membros
- dddweb213 pts
- andersonop207 pts
- Jotah197 pts
- fbinasco165 pts
- fredbcn117 pts
Últimos membros cadastrados
- valkyem 18/05
- Info Galaxyem 17/05
- notwenem 16/05





