Saltar al contenido

Usar Python para enviar correos electrónicos

Python incluye varios módulos en la biblioteca estándar para trabajar con correos electrónicos y servidores de correo electrónico.

Resumen de smtplib

El módulo smtplib define un objeto de sesión de cliente SMTP que se puede utilizar para enviar correo a cualquier máquina de Internet con un demonio de escucha SMTP o ESMTP.

SMTP significa Protocolo simple de transferencia de correo. Los módulos smtplib son útiles para comunicarse con servidores de correo para enviar correo.

El envío de correo se realiza con smtplib de Python utilizando un servidor SMTP.

El uso real varía según la complejidad del correo electrónico y la configuración del servidor de correo electrónico, las instrucciones aquí se basan en el envío de correo electrónico a través de Gmail.

Uso de smtplib

Este ejemplo se toma de este correo en wikibooks.org

"""The first step is to create an SMTP object, each object is used for connection 
with one server."""

import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)

#Next, log in to the server
server.login("youremailusername", "password")

#Send the mail
msg = "
Hello!" # The /n separates the message from the headers
server.sendmail("[email protected]", "[email protected]", msg)

Para incluir encabezados De, A y Asunto, debemos usar el paquete de correo electrónico, ya que smtplib no modifica el contenido ni los encabezados en absoluto.

Descripción general del paquete de correo electrónico

El paquete de correo electrónico de Python contiene muchas clases y funciones para redactar y analizar mensajes de correo electrónico.

Uso del paquete de correo electrónico

Comenzamos importando solo las clases que necesitamos, esto también nos ahorra tener que usar el nombre completo del módulo más adelante.

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

Luego, redactamos algunos de los encabezados de mensajes básicos:

fromaddr = "[email protected]"
toaddr = "[email protected]"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Python email"

A continuación, adjuntamos el cuerpo del correo electrónico al mensaje MIME:

body = "Python test mail"
msg.attach(MIMEText(body, 'plain'))

Para enviar el correo, tenemos que convertir el objeto en una cadena y luego usar el mismo procedimiento anterior para enviar usando el servidor SMTP.

import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login("youremailusername", "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)

Verificar una dirección de correo electrónico

El protocolo SMTP incluye un comando para preguntar al servidor si una dirección es válida. Por lo general, VRFY está deshabilitado para evitar que los spammers encuentren direcciones de correo electrónico legítimas, pero si está habilitado, puede preguntarle al servidor acerca de una dirección y recibir un código de estado que indique la validez junto con el nombre completo del usuario.

Este ejemplo se basa en esto correo

import smtplib

server = smtplib.SMTP('mail')
server.set_debuglevel(True)  # show communication with the server
try:
    dhellmann_result = server.verify('dhellmann')
    notthere_result = server.verify('notthere')
finally:
    server.quit()

print 'dhellmann:', dhellmann_result
print 'notthere :', notthere_result

Envío de correos electrónicos mediante Gmail

Este ejemplo está tomado de http://rosettacode.org/wiki/Send_an_email#Python

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

import smtplib
 
def sendemail(from_addr, to_addr_list, cc_addr_list,
              subject, message,
              login, password,
              smtpserver="smtp.gmail.com:587"):
    header="From: %s
" % from_addr
    header += 'To: %s
' % ','.join(to_addr_list)
    header += 'Cc: %s
' % ','.join(cc_addr_list)
    header += 'Subject: %s

' % subject
    message = header + message
 
    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()

Ejemplo de uso del script anterior


sendemail(from_addr="[email protected]", 
          to_addr_list = ['[email protected]'],
          cc_addr_list = ['[email protected]'], 
          subject="Howdy", 
          message="Howdy from a python function", 
          login        = 'pythonuser', 
          password     = 'XXXXX')
Ejemplo de correo electrónico recibido

sendemail(from_addr="[email protected]", 
          to_addr_list = ['[email protected]'],
          cc_addr_list = ['[email protected]'], 
          subject="Howdy", 
          message="Howdy from a python function", 
          login        = 'pythonuser', 
          password     = 'XXXXX')
Fuentes

Python on Wikibooks.org
Rosettacode.org
Docs.python.org
http://docs.python.org/2/library/email.mime.html

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.