Filosofia de Vida – Pensamento, comportamento e opinião

05
Jul

Exportando todos os emails que voltaram e filtrando com regular expression no PHP

Recentemente fiz uma mala direta e enviei para vários emails. É claro que vários retornaram e então tive que arrumar uma forma de fazer uma lista de emails que retornaram para excluir do cadastro.

filtra_email_php1Como eram muitos, eu não iria fazer aquilo na mão e de 200 anos. Então tive a idéia de filtrar com uma regular expression o retorno do Mailer deamon procurando somente os emails e assim conseguindo a minha lista.

Para isso eu precisava de todos os emails com arquivos texto. Lembrei-me de que o quando você arrasta o email para uma pasta o Outlook Express transforma em um arquivo com extensão .eml que nada mais é que um arquivo texto. Pensei: “fechou”.

Foi então que satanás atacou…

filtra_email_php2-5

filtra_email_php3

Adivinha, eu uso o Outlook do Office que mantém a função de drap’n'drop só que cria um arquivo .MSG que é proprietário, só ele lê e ainda faz “pitofió” in your face!

Dammit!

Bom, pensei em soluções alternativas. Enviei anexado um dos PostMaster Error Delivery para minha conta do Santo GMail e eureca!

filtra_email_php4

Ele não só me mostrava em texto, como convenientemente tinha um abençoado “download all attachments” que me salvou o dia.

Assim eu tinha milhares de arquivos: “noname1, noname2, noname…” em texto puro prontos para serem regular expressionated…

Feito isso, vamos ao PHP criar um código very easy:

<?PHP

$res = opendir('.');

while (false !== ($file = readdir($res))) {
if(stristr($file,'noname')){  // <--- Mudar aqui a string com o nome dos arquivos
$files[] = $file;
}
}
closedir($res);

$lista_e = array();

foreach($files as $file){
$str = file_get_contents($file);
$num = preg_match_all('/[A-Za-z0-9.-_]+@[A-Za-z0-9.-_]+.[A-Za-z]{2,4}/',$str,&$emails);
if($num > 0) {
foreach($emails[0] as $e) $lista_e[] = $e;
unset($emails);
}
}
sort($lista_e);
$lista_e = array_flip($lista_e);
$lista_e = array_flip($lista_e);

$fp = fopen('emailsinvalisdos.txt', 'w+');

foreach($lista_e as $s)
fputs($fp, $s."n");

fclose($fp);
?>

Note a sutileza do array_flip duas vezes para eliminar emails repetidos.

Feito isso, eu tinha em mãos um arquivo com todos emails que haviam retornado. A minha base de dados é (infelizmente) em access, fui lá no dito cujo e criei uma nova consulta de atualização.

update [Cadastro Clientes] set EMail = null where Email in ("email@email.com", "email2@email.com", "and@so.on", ...);

Finish Him! Fatality!

One Response to “Exportando todos os emails que voltaram e filtrando com regular expression no PHP”

  1. 1
    Fabio Lima | 29 anos | Paulínia | SP Says:

    Parabéns!
    Eu tentei, mas não consegui começar este comentário sem antes parabenizá-lo por tal feito!
    Adorei este script bem como a solução de se usar o gmail, pois é incrível como quando estamos de cabeça cheia (fritando) não sai nada…
    Há dias venho tentando fazer isso e aí me deparo com seu post no Google…
    Com certeza saiba que me ajudou e muito (ainda mais com uma mailling de ~ 25.000 emails sem confirmação!)

Leave a Reply

© 2010 Filosofia de Vida – Pensamento, comportamento e opinião | Entries (RSS) and Comments (RSS)

Design by Web4 Sudoku - Powered By Wordpress