[gitec] Script para tratar bouces de newsletter

Angelo Marcondes de Oliveira Neto angelomarcondes em gmail.com
Sexta Dezembro 3 11:17:26 BRST 2010


Fabiano,

Muito legal esta implementação, podemos postar a mesma no colab?

Abraços

Angelo Marcondes De Oliveira Neto
http://uaigeek.blogspot.com
angelomarcondes em gmail.com

Em dez 3, 2010 9:38 AM, "Fabiano Weimar dos Santos" <xirumacanudo em gmail.com
>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 :)

-- 
Fabiano Weimar dos Santos [Xiru]
http://www.pytown.com
Blog: http://blog.xiru.org
Twitter: xiru
Buzz: xirumacanudo
Skype: xirumacanudo
MSN: xirumacanudo




--
Site da Comunidade GITEC:
http://colab.interlegis.gov.br/wiki

Regras de participação:
http://colab.interlegis.gov.br/wiki/ComoParticiparComunidade

Para pesquisar o histórico da lista visite:
http://colab.interlegis.gov.br/wiki/PesquisaListas

Para administrar sua conta visite:
http://listas.interlegis.gov.br/mailman/listinfo/gitec
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.interlegis.gov.br/pipermail/gitec/attachments/20101203/01c634da/attachment.htm 


Mais detalhes sobre a lista de discussão GITEC