você está aqui: Home  → Arquivo de Mensagens

Extração de endereços de email de arquivos de log

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 19 de janeiro de 2017

Alguns anos atrás a Dicas-L foi expulsa de um provedor nos EUA sob a alegação de que eu estava fazendo spam. Segundo o provedor, eles tinham tolerância zero para spam e eu fui condenado sem direito a defesa.

Como eu não faço spam, todos os assinantes da Dicas-L assinaram a lista segundo um mecanismo de confirmação dupla, preciso explicar o que aconteceu.

Com o tempo, muitos assinantes deixam de usar seus endereços eletrônicos fazendo com que os provedores os removam. Uma das técnicas utilizadas por provedores para detectar spam é inserir endereços de email não existentes em alguns locais para que os softwares que colhem emails pela web os capturem. Desta forma, se alguém envia mensagens para estes endereços propositalmente espalhados pela Internet, certamente é um spammer.

Bom, no meu caso não foi bem assim. Eu fui considerado um spammer por enviar mensagem para um endereço não existente mas que já havia existido um dia.

Felizmente, como eu mantenho múltiplos backups do meu conteúdo, eu consegui contratar um novo provedor e colocar o site novamente no ar em algumas horas.

Para evitar uma repetição deste fato, eu faço uma limpeza periódica da lista de assinantes, removendo os endereços que não existem mais. Como não poderia deixar de ser, eu uso um pequeno script bash para realizar esta tarefa:

  #!/bin/bash -x
  
  assinantes=/home/mojo_files/dicas-l.list
  log=/var/log/mail.log
  log_processado=/tmp/mail.log.$$
  enderecos_invalidos=/tmp/enderecos_invalidos.$$
  enderecos_validos=/tmp/enderecos_validos.$$
  
  cd /var/log/
  
  fgrep -i "unknown user" $log | \
        grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' | \
        sort | uniq -i > $enderecos_invalidos
  
  vi $enderecos_invalidos
  
  grep -v -f $enderecos_invalidos $assinantes > $enderecos_validos
  
  wc $enderecos_validos $assinantes

A diretiva "-o" do comando grep faz com que seja impresso apenas os caracteres que batem com a expressão regular, e não a linha inteira. Desta forma, apenas o endereço de email é capturado.

A expressão regular

  [:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*

é a representação de um endereço eletrônico. O resultado é então ordenado (sort) e removidas as linhas duplicadas (uniq -i).

O comando wc é apenas para comparar a listagem original com a listagem processada, para ver quantos endereços serão removidos da lista de assinantes da Dicas-L.

A parte final, que é a atualização da lista de assinantes, eu faço manualmente, para evitar algum eventual problema. É claro que eu tenho múltiplos backups para recuperação em caso de problemas, mas eu prefiro ser cuidadoso.

Referências



Veja a relação completa dos artigos de Rubens Queiroz de Almeida

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script