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: 33.424 ]

Por: Felipe em 02/11/2008


Nova lib: /usr/lib/sendmail



Agora para nós podermos "brincar" mais com os emails 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.

Roteiro:
  • Enviar email com anexo;
  • E-mails em massa;
  • Enviando emails anonimamente.

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 => '[email protected]', #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 = &#8220;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,&#8221;| /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 = &#8220;O servidor de backup realizou o backup com sucesso,em anexo o script de backup !”;

$top = build MIME::Entity From => &#8216;Root <root>’,
To => &#8217;[email protected]’,
Subject => &#8220;[Backup-Empresa] Confirmação do Backup “,
Data => $txt1;


$top->attach(
   Name => &#8220;algumacoisaExemplo.sh”,
   Path => &#8220;/diretório/algumacoisaExemplo.sh”,
   # Se o anexo for compactado
   #Type => “application/x-gtar”,
   Encoding => &#8220;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.

Página anterior     Próxima página

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

Perl e MySQL

Catalyst Framework Perl (parte 1)

Enviando notificações do Nagios para o MSN

Executando os principais frameworks Perl no cPanel com CGI

Programando em Perl (parte 1)

  
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 => '[email protected]',
Password => 'sua senha aki',
Timeout => 30,
Debug => 1,
);
#dados de envio do e-mail
$smtp->mail('[email protected]');
$smtp->to('[email protected]');
#assunto e corpo da mensagem
$smtp->data();
$smtp->datasend ('From: [email protected]');
$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('[email protected]');------) 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