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
MIMEBase
yencoders.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
smtplib
para 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.