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.499 ]

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

Programando em Perl (parte 1)

Autenticação mútua SSL em servidores de NF-e e CT-e

Módulos CPAN no Debian e distros GNU/Linux em geral

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

Programando uma Intranet com Apache, MySQL e Perl (parte 2)

  
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