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 emails 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);