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.
Como 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…
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!
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!










