[gitec] Script para tratar bouces de newsletter

Fabiano Weimar dos Santos xirumacanudo em gmail.com
Sexta Dezembro 3 10:38:22 BRST 2010


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 :)

-- 
Fabiano Weimar dos Santos [Xiru]
http://www.pytown.com
Blog: http://blog.xiru.org
Twitter: xiru
Buzz: xirumacanudo
Skype: xirumacanudo
MSN: xirumacanudo
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.interlegis.gov.br/pipermail/gitec/attachments/20101203/82169675/attachment.htm 


Mais detalhes sobre a lista de discussão GITEC