Skip to main content

Email

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:

  1. 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.

  2. 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:

  1. 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
  2. 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
  3. 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'
  4. 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
  5. Adjuntar archivos:

    • Puedes adjuntar archivos utilizando MIMEBase y encoders.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)
  6. 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()

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.