Skip to main content

smtplib

En Python, smtplib es una biblioteca que te permite enviar correos electrónicos utilizando el protocolo SMTP (Simple Mail Transfer Protocol). A continuación, te explico cómo enviar un correo electrónico con smtplib y algunos ejemplos de cómo usar la biblioteca.

Configuración de smtplib

  1. Importar smtplib: Primero, importa la biblioteca smtplib.

    import smtplib
  2. Configurar el servidor SMTP: Debes conocer los detalles del servidor SMTP del servicio de correo que estés utilizando. Los servicios más comunes, como Gmail, Yahoo, Outlook, etc., tienen servidores SMTP específicos.

    • Para Gmail: smtp.gmail.com con puerto 587 (TLS) o 465 (SSL).
    • Para Yahoo: smtp.mail.yahoo.com con puerto 465 (SSL).
    • Para Outlook: smtp.office365.com con puerto 587 (TLS).
  3. Iniciar una conexión con el servidor SMTP: Utiliza la clase smtplib.SMTP() para establecer una conexión con el servidor SMTP especificado.

    server = smtplib.SMTP('smtp.gmail.com', 587)
  4. Usar TLS o SSL: Si el servidor utiliza TLS (Transport Layer Security), debes iniciar TLS utilizando el método starttls() después de establecer la conexión.

    server.starttls()
  5. Autenticación: Inicia sesión con tu dirección de correo electrónico y contraseña utilizando el método login().

    server.login('tu_email@gmail.com', 'tu_contraseña')
  6. Enviar el correo: Utiliza el método sendmail() para enviar el correo. Necesitarás especificar el remitente, el destinatario y el mensaje en formato de cadena.

    from_email = 'tu_email@gmail.com'
    to_email = 'destinatario@gmail.com'
    message = 'Subject: Asunto del correo\n\nEste es el cuerpo del correo.'

    server.sendmail(from_email, to_email, message)
  7. Cerrar la conexión: Después de enviar el correo, cierra la conexión con el servidor SMTP utilizando quit().

    server.quit()

Ejemplo completo

El siguiente es un ejemplo completo de cómo enviar un correo electrónico con smtplib utilizando Gmail:

import smtplib

# 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'

# Crea el mensaje del correo
subject = 'Asunto del correo'
body = 'Este es el cuerpo del correo.'
message = f'Subject: {subject}\n\n{body}'

# Establece la conexión con el servidor SMTP
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Inicia TLS
server.login(from_email, password)

# Envía el correo
server.sendmail(from_email, to_email, message)

# Cierra la conexión con el servidor SMTP
server.quit()

Envío de correos electrónicos con adjuntos

Para enviar correos electrónicos con adjuntos, puedes utilizar la biblioteca email junto con smtplib. La clase MIMEMultipart de email te permite crear correos electrónicos con múltiples partes, como texto y archivos adjuntos. Aquí tienes un ejemplo de cómo enviar un correo con un archivo adjunto:

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, un archivo (archivo.pdf) se adjunta al correo electrónico utilizando clases de email como MIMEMultipart, MIMEText, y MIMEBase. Cambia el nombre del archivo según sea necesario.

Estas son las bases de cómo enviar correos electrónicos con smtplib. Siempre asegúrate de manejar las credenciales de correo electrónico de manera segura, evitando almacenarlas en texto plano en el código.