Pular para o conteúdo

Validando lista de e-mail no MX

Este script recebe como argumento um arquivo texto contendo uma lista de e-mails, um por linha e retorna a lista de somente os e-mails válidos. Ele verifica se a sintaxe do e-mail está correta e se o usuário existe no servidor de e-mail do domínio. Forma de uso:

./valida_email.pl arquivo_lista > nova_lista.txt
Fábio Berbert de Paula fabio
Hits: 9.846 Categoria: Perl Subcategoria: Correio eletrônico
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Este script recebe como argumento um arquivo texto contendo uma lista de e-mails, um por linha e retorna a lista de somente os e-mails válidos. Ele verifica se a sintaxe do e-mail está correta e se o usuário existe no servidor de e-mail do domínio. Forma de uso:

./valida_email.pl arquivo_lista > nova_lista.txt
Download valida_email.pl Enviar nova versão

Esconder código-fonte

#!/usr/bin/perl
# valida_email.pl
# Este script recebe como argumento um arquivo texto contendo
# uma lista de e-mails, um por linha e retorna a lista de 
# somente os e-mails válidos. Ele verifica se a sintaxe do 
# e-mail está correta e se o usuário existe no servidor de
# e-mail do domínio.
# 
# Por: Fábio Berbert de Paula <fabio@vivaolinux.com.br>
# Rio de Janeiro, 30 de Outubro de 2003.

use strict;
use Mail::Address;
use MIME::Entity;
use Tie::DNS;

my $lista = shift;
if (! -f $lista) {
   print "Use: $0 <arquivo_lista>\n";
   exit;
}

my %dns = ();
tie(%dns, 'Tie::DNS', { 'type' => 'MX' } );
my $res = Net::DNS::Resolver->new;

# converter a lista de e-mail para um hash e remover os 
# e-mails duplicados
my %lista_email = ();
open(READ, $lista);
while (<READ>) {
   chomp;
   if (!defined($lista_email{$_})) {
      $lista_email{$_} = 1;
   }
}
close(READ);

foreach my $email (keys %lista_email) {
   my @addrs = Mail::Address->parse($email);
   foreach my $addr (@addrs) {
      my $user = $addr->user;
      my $domain = $addr->host;
      if(!$user) { next;}
      if(!$domain) { next;}
      if ($user =~ m/\^/) { next;}
      if ($user =~ m/\@/) { next;}
      if ($domain =~ m/\@/) { next;}
      if ($domain =~ m/\.$/) { next;}
      if ($domain =~ m/^\./) { next;}
      if ($domain =~ m/_/) { next;}
      my $mx = $dns{$domain};
      if (!$mx) { next; };
      print $addr->format,"\n";
   }

}

Email UserAdmin

Envia e-mail com anexo

Retorna apenas emails válidos com MX válidos

Remover caixas postais do Cyrus IMAP

Adicionar conta de e-mail - Postfix com domínios virtuais no MySQL

#1 Comentário enviado por kidoidera em 10/12/2007 - 16:56h
vou fazer um teste ... logo postarei os resultados ...
é muito interessante no meu caso que tenho muitos e-mails para newslestter, pois assim consome menos banda no envio das mesmas.
vlw

Contribuir com comentário

Entre na sua conta para comentar.