Enviando emails com Python

quarta-feira, 18 de agosto de 2010 Ramiro Batista da Luz
Enviando emails com Python.

A maioria dos meus amigos sabem que estou ajudando a Associação Python Brasil a organizar a PythonBrasil[6]. Dia 23 de agosto se encerra a chamada de trabalhos, então resolvi enviar um email para todas as comunidades de tecnologias relacionadas a python no Brasil. Mas como?

Bom, eu poderia ter feito uma mala direta com o BROffice, ou feito um crossposting adicionando todos os endereços no campo "para:" ou no campo "cc:" só que pensei que isso ia demostrar uma preguiça e as pessoas que participam das listas poderiam achar anti-ético.

Então eu me inscrevi em todas as listas e ao invés de enviar um email para cada lista, resolvi fazer uma das coisas que eu mais gosto, resolvi programar em Python.

O resultado, é esse script simples que resolvi compartilhar no meu blog.

Exemplo de CSV:
"grupy-pr@googlegroups.com","Grupo de usuarios Python","Parana"

Envio de email:

#!/usr/bin/env python
# -*- coding=utf-8 -*-


template_msg = '''
Presados amigos do %(grupo)s %(local)s !!!

Esta mensagem e um lembrete para avisar que o periodo para envio de trabalhos para
a PythonBrasil[6] esta chegando ao fim no dia 23 de agosto, proxima segunda-feira.

Essa eh a sua chance de mostrar para a comunidade o que voce tem feito com Python!

Envie sua proposta e colabore com o evento.
 
http://www.pythonbrasil.org.br/2010/saiba-mais/noticias/aberta-a-chamada-de-trabalhos-para-a-pythonbrasil-6

A Associacao Python Brasil e a Comunidade Python Brasileira ficam muito agradecidas.
'''

import csv

# http://docs.python.org/library/email-examples.html
# Import smtplib for the actual sending function
import smtplib

# Import the email modules we'll need
from email.mime.text import MIMEText

# Open a plain text file for reading.  For this example, assume that
# the text file contains only ASCII characters.
#fp = open(textfile, 'rb')
# Create a text/plain message
#msg = MIMEText(fp.read())
#fp.close()

def process(row):
    # me == the sender's email address
    # you == the recipient's email address
    msg = MIMEText(template_msg % {'grupo':row[1],
                                   'local':row[2]})
    msg['Subject'] = 'Lembrete chamada de trabalhos PythonBrasil[6]'
    msg['From'] = 'ramiroluz@gmail.com'
    msg['To'] = row[0]

    # Send the message via our own SMTP server, but don't include the
    # envelope header.
    s = smtplib.SMTP('localhost')
    s.sendmail('ramiroluz@gmail.com', [row[0]], msg.as_string())
    s.quit()

if __name__ == '__main__':
    '''A dica para usar o modulo csv é a seguinte:
 
    >>> import csv
    >>> help(csv.reader)
    '''
    f = open('enderecos.csv')
    csv_reader = csv.reader(f)
    for row in csv_reader: 
        process(row)
    f.close()


Simples assim. Será enviado um email para cada endereço da lista. Use com responsabilidade. :)

4 comentários: Enviando emails com Python

Razer disse...
18 de agosto de 2010 17:52

Báh Ramiro, era o que eu precisava para divulgar alguns eventos aqui, o tal do "SPAM AMIGO". Atualmente tenho umas listas no Thunderbird, mas com certeza esse script vai ajudar MUITO.

Valeu...

Razer.

Ramiro Batista da Luz disse...
18 de agosto de 2010 18:00

Que legal, precisando de ajuda é só falar.

Adolfo Neto disse...
19 de agosto de 2010 04:41

Muito bom! Também preciso de um script desses às vezes.

David disse...
28 de junho de 2011 06:03

Caro Ramiro,


Estou começando a programar em python e estou gostando muito. Eu estou trabalhando em um sistema que monitora um site de informações e quero que quando um evento ocorra ele dispare um e-mail para uma série de pessoas previamente selecionadas.
Eu dividi o sistema em várias partes para eu poder entender melhor como funciona cada uma delas. Já consegui acessar os dados, pesquisar neles, e agora estou tentando enviar os e-mails. Pesquisando na net achei o seu blog e vi aquela postagem de como enviar e-mails. Contudo quando tento executar ele retorna o erro:

File "C:\Python25\lib\smtplib.py", line 695, in sendmail
raise SMTPRecipientsRefused(senderrs)
SMTPRecipientsRefused: {'dbcerqueira@yahoo.com.br': (550, ' No such user here')}

Você pode me ajudar?

Desde já agradeço.