Enviando emails em Perl

A forma mais comum de se enviar emails em Perl é usando o Net::SMTP, mas este não tem muitos recursos. Já em plataformas UNIX/Linux podemos enviar emails em massa, com anexo e até anonimamente, neste artigo mostrarei como.

[ Hits: 35.972 ]

Por: Felipe em 02/11/2008


Enviando emails 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 ideia)

Bom, como foi meu primeiro artigo, espero que vocês entendam e gostem, desculpem pelos erros de português e obrigado pela oportunidade.

Página anterior    

Páginas do artigo
   1. Básico: Net::SMTP
   2. Nova lib: /usr/lib/sendmail
   3. E-mails em massa com Perl
   4. Enviando emails anonimamente com Perl
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Manipulação de sockets em Perl usando o IO::Socket::INET

Script Perl para consultas em base LDAP e/ou Active Directory

Catalyst Framework Perl - (parte 2)

Executando os principais frameworks Perl no cPanel com CGI

Comparação entre Tcl e Perl

  
Comentários
[1] Comentário enviado por QuestLoder em 03/11/2008 - 08:35h

Show de bola,
Estava procurando um artigo assim, parabens...


vou testar
Abraço.

[2] Comentário enviado por dailson em 04/11/2008 - 16:45h

Amigo. Já uso o perl para enviar emails via linha de comando, porém tenho uma dificuldade e gostaria de saber se você pode me ajudar.
Toda vez que acentuo um caracter no Subject, chega errado em alguns clientes de email como o hotmail.
No corpo da mensagem ocorre tudo bem. Como faço para colocar acentuação no subject ??

[3] Comentário enviado por Cooler_ em 04/11/2008 - 16:51h

meus parabens Brother
cada dia melhor em
um salve ai

[4] Comentário enviado por perserktor em 04/05/2009 - 18:48h

apenas acrescentando, caso queria utilizar outro servidor SMTP, pois hotmail por exemplo barra envio se o seu smtp não for um SMTP valido.

O grande x da questão é que servidores de e-mail como o do G-Mail usam autenticação "SSL" ou "TLS" para usa-los vc deve utilizar modulos específicos.

Segue o exemplo de envio utilizando o smtp do Ggmail,

use Net::SMTP::TLS;
use IO::Socket::INET;

# Pega o domain host
use Net::SMTP;
my $domain = Net::SMTP->new('smtp.gmail.com', Timeout => 30);
my $domainhost = $domain->domain;
#configuração para conexão TSL
my $smtp = Net::SMTP::TLS->new('smtp.gmail.com',
Hello => $domainhost,
Port => 587,
User => 'seuemail@gmail.com',
Password => 'sua senha aki',
Timeout => 30,
Debug => 1,
);
#dados de envio do e-mail
$smtp->mail('remetente@dominio.com');
$smtp->to('destinatario@dominio.com');
#assunto e corpo da mensagem
$smtp->data();
$smtp->datasend ('From: tepego_na_curva@hotmail.com');
$smtp->datasend("\n");
$smtp->datasend('Subject: -----Seu Assunto Aki-------');
$smtp->datasend("\n");
$smtp->datasend("-----PENSE MUITO ANTES DE FAZER O MAL, POIS ELE VOLTARA PRA VOCÊ ----");
$smtp->dataend();
$smtp->quit;

Espero ter contribuido com o post de nosso amigo, e lembrem-se de usar este scrip de forma adequada. rs

[5] Comentário enviado por poetah em 10/10/2009 - 00:15h

pena que no gmail mesmo autenticando ele envia
com o nome de email padrao, sem ser fake!!!

bom artigo

[]'s

[6] Comentário enviado por BarbaNegra em 15/09/2010 - 19:04h

show de bola os tutoriais do Drake e do C00l3r salvam a pátria diariamente xD

[7] Comentário enviado por barao2011 em 09/01/2012 - 21:34h

como faz pra configurar esse envio com io ou dns reverso ????

[8] Comentário enviado por swit em 24/01/2012 - 12:59h

Ola eu estou tentando envia emails anonymos com a opção que vc descreveu porem ele nao envia gostaria de saber oque vc preciso configura pra consegui envia emails anonymos em massa?

[9] Comentário enviado por joaorubens em 03/03/2013 - 20:58h

cara com o pouco que já consegui entender sobre o assunto, esse seu post ta otimo e vou testar, mas se puder me responder antecipadamente quero saber se posso substituir isso (------$smtp->to('c00l3r@hotmail.com');------) por um arquivo com uma lista como vi em um video no youtube http://www.youtube.com/watch?v=A7Ye1sHjLRE

e a mensagem tambem posso substituir por um arquivo?
se quiser visitar meu poste, tem um script que fiz mas não conseui usar
vivaolinux.com.br/topico/vivaolinux/Como-enviar-email-via-SSH

valeu, abraço.

[10] Comentário enviado por mauriliovilela em 17/01/2015 - 14:04h

Não estou conseguindo mais enviar emails através deste script, o script roda legal, faz tudo certinho, mas o email não chega.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts