[gitec] Script para tratar bouces de newsletter

Sesostris Vieira sesostris em interlegis.gov.br
Sexta Dezembro 3 15:48:07 BRST 2010


Legal, vou empacotá-la no SAAP.

Sesóstris Vieira
Analista de Informática Legislativa
SPDT / Interlegis / Senado Federal
sesostris em interlegis.gov.br



Fabiano Weimar dos Santos escreveu:
> Oi Pessoal,
>
> no encontro do gitec, durante a apresentação sobre o SAAP, eu falei que
> tinha um script que ajudava a tratar as mensagens que dão bounce quando
> enviamos uma newsletter. O script parte do pressuposto que a newsletter é
> enviada com um endereço from que, no meu caso, acaba caindo em um label do
> gmail. Eu acabei adotando essa estratégia pq é fácil criar uma conta no
> gmail para coletar lixo de newsletter, escrever regras que filtram as
> mensagens que essa conta recebe e atribuir um label a todas aquelas
> mensagens que acreditamos ser um erro (como uma tentativa de envio de
> newsletter para um endereço de e-mail que não existe ou que está com a caixa
> postal cheia, por exemplo).
>
> O script é trivial: ele usa o protocolo IMAP, conecta-se no servidor de
> e-mail, abre o label (que do ponto de vista do IMAP é uma pasta), baixa as
> mensagens e extrai todos os endereços de e-mail que são potencialmente
> problemáticos. Depois, basta usar a saída desse script para limpar a lista
> de e-mails que é utilizada para fazer o envio da newsletter.
>
> Segue o script:
>
> import imaplib
>
> USUARIO = "xxx"
> SENHA = "xxx"
> LABEL = "xxx"
> IGNORAR = [USUARIO]
>
> def extrai_emails(num, msg):
>  for l in msg.split('\n'):
>    l = l.strip()
>    if l.startswith('To: '):
>      emails = [e.strip() for e in l[4:].split(',') if e.strip() not in
> IGNORAR]
>      if emails:
>        print "\n".join(emails)
>
> def run():
>  M = imaplib.IMAP4_SSL("imap.gmail.com")
>  M.login(USUARIO, SENHA)
>  M.select(LABEL)
>  typ, data = M.search(None, 'ALL')
>  for num in data[0].split():
>    typ, data = M.fetch(num, '(RFC822)')
>    extrai_emails(num, data[0][1])
>  M.close()
>  M.logout()
>
> if __name__ == '__main__':
>  run()
>
> Espero que seja útil :)
>
>   


Mais detalhes sobre a lista de discussão GITEC