En Python, puedes crear y enviar correos electrónicos utilizando la biblioteca email, que forma parte de la biblioteca estándar de Python. Esta biblioteca ofrece herramientas para crear mensajes de correo electrónico con diferentes formatos (texto plano, HTML, etc.) y características (archivos adjuntos, imágenes, etc.). A continuación, te explicaré cómo enviar un correo electrónico con email en Python.
Crear un correo electrónico con email
La biblioteca email tiene varias subbibliotecas y clases que te permiten crear correos electrónicos con múltiples partes (texto, HTML, imágenes, archivos adjuntos, etc.). Vamos a revisar algunos conceptos clave:
-
MIME (Multipurpose Internet Mail Extensions): Es un estándar que permite incluir diferentes tipos de contenido en los correos electrónicos, como texto, imágenes, archivos, etc.
-
Clases principales:
MIMEMultipart: Permite crear mensajes de correo con múltiples partes, como texto y archivos adjuntos.MIMEText: Permite crear mensajes de texto plano o HTML.MIMEImage: Permite crear mensajes con imágenes.MIMEBase: Base para crear otros tipos de mensajes MIME, como archivos adjuntos.
Crear un correo electrónico con email
Puedes seguir los siguientes pasos para crear un correo electrónico utilizando email:
-
Importar las subbibliotecas necesarias:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email import encoders -
Crear un mensaje:
- Para un correo con solo texto o HTML, utiliza
MIMEText. - Para un correo con múltiples partes (por ejemplo, texto y archivos adjuntos), utiliza
MIMEMultipart.
msg = MIMEMultipart() # Crea un correo con múltiples partes - Para un correo con solo texto o HTML, utiliza
-
Configurar los detalles del correo:
- Especifica el remitente (
From), el destinatario (To) y el asunto (Subject).
msg['From'] = 'tu_email@gmail.com'
msg['To'] = 'destinatario@gmail.com'
msg['Subject'] = 'Asunto del correo' - Especifica el remitente (
-
Agregar contenido:
- Puedes agregar texto o HTML como cuerpo del mensaje.
body = 'Este es el cuerpo del correo.'
msg.attach(MIMEText(body, 'plain')) # 'plain' para texto plano, 'html' para HTML -
Adjuntar archivos:
- Puedes adjuntar archivos utilizando
MIMEBaseyencoders.encode_base64()para codificar el archivo.
filename = 'archivo.pdf' # Cambia el nombre del archivo según sea necesario
with open(filename, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
# Codifica el archivo adjunto
encoders.encode_base64(part)
# Añade los encabezados del archivo adjunto
part.add_header('Content-Disposition', f'attachment; filename={filename}')
# Adjunta el archivo al mensaje
msg.attach(part) - Puedes adjuntar archivos utilizando
-
Enviar el correo:
- Utiliza la biblioteca
smtplibpara enviar el correo a través de un servidor SMTP. - Inicia sesión en tu cuenta de correo y utiliza el método
sendmail()para enviar el correo.
import smtplib
# Configuración del servidor SMTP
smtp_server = 'smtp.gmail.com'
smtp_port = 587 # TLS
# Establece la conexión con el servidor SMTP
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Inicia TLS
server.login('tu_email@gmail.com', 'tu_contraseña')
# Envía el correo
server.sendmail(msg['From'], msg['To'], msg.as_string())
# Cierra la conexión con el servidor SMTP
server.quit() - Utiliza la biblioteca
Ejemplo completo
Aquí tienes un ejemplo completo que muestra cómo crear un correo electrónico con texto plano y un archivo adjunto, y luego enviarlo utilizando email y smtplib:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# Configuración del servidor SMTP
smtp_server = 'smtp.gmail.com'
smtp_port = 587 # TLS
# Datos de inicio de sesión
from_email = 'tu_email@gmail.com'
password = 'tu_contraseña'
to_email = 'destinatario@gmail.com'
# Crear el mensaje
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = 'Asunto del correo'
# Cuerpo del mensaje
body = 'Este es el cuerpo del correo.'
msg.attach(MIMEText(body, 'plain'))
# Adjuntar un archivo
filename = 'archivo.pdf' # Cambia el nombre del archivo según sea necesario
with open(filename, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
# Codifica el archivo adjunto
encoders.encode_base64(part)
# Añade los encabezados del archivo adjunto
part.add_header(
'Content-Disposition',
f'attachment; filename={filename}',
)
# Adjunta el archivo al mensaje
msg.attach(part)
# Conexión y autenticación con el servidor SMTP
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Inicia TLS
server.login(from_email, password)
# Enviar el correo
server.sendmail(from_email, to_email, msg.as_string())
# Cerrar la conexión
server.quit()
En este ejemplo, el correo electrónico tiene un cuerpo de texto plano y un archivo adjunto (un archivo PDF). Puedes ajustar este ejemplo según tus necesidades, como cambiar el tipo de archivo adjunto o enviar un mensaje en formato HTML.