- 1 Hola
1. Introducción
Enviar correos electrónicos con Python es una habilidad extremadamente útil en aplicaciones personales o sistemas empresariales. Por ejemplo, se puede utilizar para enviar notificaciones automáticamente a los usuarios desde una aplicación o para transmitir registros de errores del sistema en tiempo real a los administradores. Además, en lugar de enviar correos manualmente, el código permite hacerlo de manera eficiente, lo que contribuye en gran medida a la optimización de las tareas cotidianas.
Python incluye la biblioteca estándar «smtplib», lo que permite el envío básico de correos sin necesidad de agregar módulos externos. En este artículo, explicaremos la configuración y los pasos básicos para enviar correos con Python, e introduciremos métodos prácticos utilizando ejemplos de código reales. También detallaremos ejemplos avanzados como el envío de correos en formato HTML, correos con archivos adjuntos, configuración de seguridad utilizando Gmail, envío de correos en japonés y envío masivo a múltiples destinatarios.
Al finalizar esta guía, podrás enviar correos fácilmente con Python y adquirirás conocimientos aplicables en diversas situaciones.
2. Cómo enviar correos electrónicos con Python
Al enviar correos electrónicos con Python, se utiliza la biblioteca estándar «smtplib». Al usar esta biblioteca, es posible enviar correos electrónicos a través de un servidor SMTP simplemente escribiendo código. A continuación, se explica en detalle un resumen del módulo smtplib y los pasos básicos para enviar correos electrónicos.
Introducción al módulo smtplib
El módulo smtplib es un módulo que soporta el protocolo de cliente SMTP incluido en la biblioteca estándar de Python. Al usar este módulo, es posible conectarse directamente a un servidor SMTP desde Python y enviar correos electrónicos.
Principales características de smtplib
- Permite comunicarse fácilmente con el servidor SMTP.
- No es necesario agregar otros módulos externos, ya que está incluido en la instalación de Python, por lo que no se requiere configuración adicional.
- Permite configuraciones de seguridad y manejo de errores.
Pasos básicos para enviar correos electrónicos
Ahora, explicaremos los pasos básicos para enviar correos electrónicos con Python. Siguiendo estos pasos, podrá enviar correos electrónicos fácilmente.
1. Método de conexión al servidor SMTP
Primero, es necesario conectarse al servidor SMTP. Esto es el punto de partida para enviar correos electrónicos. Comúnmente, se utilizan servidores SMTP proporcionados por Gmail, Yahoo Mail, Outlook, etc., pero también es posible utilizar servidores SMTP dedicados de empresas.
import smtplib
# Configuración del servidor SMTP
smtp_server = "smtp.example.com" # Ejemplo: Para Gmail, «smtp.gmail.com»
smtp_port = 587 # Número de puerto común. Para Gmail, 587
2. Configuración de autenticación de inicio de sesión
Una vez establecida la conexión al servidor SMTP, se inicia sesión utilizando la dirección de correo electrónico del remitente y la contraseña. Especialmente al utilizar servidores SMTP como Gmail, puede ser necesario configurar medidas de seguridad adicionales.
# Información de la cuenta de correo
username = "your_email@example.com"
password = "your_password"
# Conexión al servidor SMTP e inicio de sesión
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Establecer una conexión segura
server.login(username, password)
3. Creación y envío del correo
A continuación, se crea el contenido del correo a enviar. Se especifica la dirección de destino, el asunto y el cuerpo, y se envía a través del servidor SMTP.
# Información de envío del correo
to_address = "recipient@example.com"
subject = "Correo de prueba"
body = "Este es un correo enviado desde Python."
# Formato del correo
message = f"Subject: {subject}\n\n{body}"
# Envío del correo
server.sendmail(username, to_address, message)
print("¡El correo ha sido enviado!")
4. Puntos clave para el manejo de errores
La conexión al servidor SMTP o el envío de correos puede generar errores inesperados. Por lo tanto, se utiliza un bloque try-except para manejar adecuadamente los errores cuando ocurran.
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_address, message)
print("¡El correo se ha enviado correctamente!")
except Exception as e:
print("Error al enviar correo:", e)
finally:
server.quit() # Cerrar la conexión
Resumen
Hasta aquí son los pasos para realizar el envío básico de correos electrónicos con Python. Al recordar este flujo, en el futuro será posible automatizar correos, enviar múltiples correos a la vez, y diversas aplicaciones. En la siguiente sección, veremos en detalle el envío de correos de texto, HTML y con archivos adjuntos usando ejemplos de código reales.

3. Práctica: Ejemplo de código para enviar correos electrónicos con Python
A partir de aquí, introduciremos ejemplos de código para enviar correos electrónicos reales utilizando Python. Explicaremos paso a paso desde los métodos para enviar correos de texto o HTML hasta los métodos para enviar correos con archivos adjuntos.
Envío de correo de texto
Primero, el método más básico para enviar correos de texto. Usamos el módulo smtplib para enviar un mensaje de texto simple.
Ejemplo de código
import smtplib
# Información de la cuenta de correo
smtp_server = "smtp.example.com"
smtp_port = 587
username = "your_email@example.com"
password = "your_password"
# Destinatario y contenido
to_address = "recipient@example.com"
subject = "Prueba de correo de texto"
body = "Este es un correo en formato de texto enviado desde Python."
# Formato del correo
message = f"Subject: {subject}\n\n{body}"
try:
# Conexión al servidor
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_address, message)
print("¡El correo de texto ha sido enviado!")
except Exception as e:
print("Error al enviar correo:", e)
finally:
server.quit()
Envío de correo HTML
A continuación, explicamos el envío de correos en formato HTML. Al usar correos HTML, es posible agregar decoración al cuerpo del mensaje o insertar enlaces. Cuando se envía incluyendo código HTML en el cuerpo del correo, usamos el módulo «email.mime» para procesar el HTML correctamente.
Ejemplo de código
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# Información de la cuenta de correo
smtp_server = "smtp.example.com"
smtp_port = 587
username = "your_email@example.com"
password = "your_password"
# Destinatario y contenido
to_address = "recipient@example.com"
subject = "Prueba de correo HTML"
html_content = '''
Hola
Este es un correo en formato HTML enviado desde Python.
Haga clic aquí
'''
# Creación del correo
message = MIMEMultipart()
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
message.attach(MIMEText(html_content, "html"))
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_address, message.as_string())
print("¡El correo HTML ha sido enviado!")
except Exception as e:
print("Error al enviar correo:", e)
finally:
server.quit()
Envío de correo con archivo adjunto
A continuación, introducimos el método para enviar correos con archivos adjuntos. Por ejemplo, es posible adjuntar archivos como PDF o imágenes a los correos y enviarlos. Para esto, usamos la clase «MIMEBase» del módulo «email.mime».
Ejemplo de código
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# Información de la cuenta de correo
smtp_server = "smtp.example.com"
smtp_port = 587
username = "your_email@example.com"
password = "your_password"
# Destinatario y contenido
to_address = "recipient@example.com"
subject = "Prueba de correo con archivo adjunto"
body = "He adjuntado un archivo. Por favor, revíselo."
# Creación del correo
message = MIMEMultipart()
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
message.attach(MIMEText(body, "plain"))
# Adjunto de archivo
filename = "example.pdf" # Nombre del archivo a adjuntar
with open(filename, "rb") as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", f"attachment; filename={filename}")
message.attach(part)
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_address, message.as_string())
print("¡El correo con archivo adjunto ha sido enviado!")
except Exception as e:
print("Error al enviar correo:", e)
finally:
server.quit()
Resumen
Al usar los ejemplos de código anteriores, podrá enviar correos en varios formatos con Python. Dependiendo del uso, es posible alternar entre formato de texto, HTML e incluso correos con archivos adjuntos. En la siguiente sección, explicaremos configuraciones específicas y puntos de atención usando Gmail como ejemplo para configurar servidores SMTP específicos.
4. Envío de correos electrónicos usando Gmail
Explicaremos en detalle cómo enviar correos electrónicos usando Gmail en Python. Gmail es ampliamente utilizado en general y proporciona un servidor SMTP al que se puede acceder fácilmente desde programas de Python. Sin embargo, para enviar correos electrónicos a través de Gmail, se necesitan algunas configuraciones de seguridad.
Configuración SMTP de Gmail
Para enviar correos electrónicos usando Gmail, utilice la siguiente información del servidor SMTP:
- Servidor SMTP:
smtp.gmail.com
- Número de puerto: 587 (usando TLS) o 465 (usando SSL)
- Autenticación: Necesaria
Ejemplo de código de configuración básica
import smtplib
from email.mime.text import MIMEText
# Configuración del servidor SMTP de Gmail
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_password"
# Destinatario y contenido
to_address = "recipient@example.com"
subject = "Prueba de correo electrónico desde Gmail"
body = "Este es un correo electrónico enviado a través de Gmail desde Python."
# Creación del contenido del correo
message = MIMEText(body)
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
try:
# Conexión al servidor y envío de correo
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Usar TLS para fortalecer la seguridad
server.login(username, password)
server.sendmail(username, to_address, message.as_string())
print("¡El correo electrónico se ha enviado usando Gmail!")
except Exception as e:
print("Error en el envío de correo:", e)
finally:
server.quit()
Notas sobre la configuración de seguridad
Cuando se usa una cuenta de Gmail, es necesario revisar la configuración de seguridad. Normalmente, Gmail impone restricciones de seguridad al acceso desde aplicaciones de terceros. Por lo tanto, para acceder desde Python, se necesitan las siguientes configuraciones.
Obtención de la contraseña de aplicación
- Habilitar el proceso de autenticación en dos pasos: Habilite la autenticación en dos pasos en la configuración de la cuenta de Gmail. Esto permite generar contraseñas de aplicación.
- Generar contraseña de aplicación: Genere una contraseña de aplicación dedicada para su programa de Python desde «Configuración de cuenta > Seguridad > Contraseñas de aplicaciones» de Gmail. Esta contraseña se usa en lugar de la contraseña de inicio de sesión normal.
Notas importantes
- Gestión de contraseñas de aplicación: Maneje las contraseñas de aplicación de manera estricta para que no las conozcan otras personas.
- Seguridad de la cuenta: Para prevenir accesos no autorizados a la cuenta de Gmail, se recomienda usar contraseñas de aplicación.
Ejemplo de código (usando contraseña de aplicación)
Cuando se usa una contraseña de aplicación, el código será como sigue.
import smtplib
from email.mime.text import MIMEText
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
app_password = "your_app_password" # Usar contraseña de aplicación en lugar de la contraseña normal
to_address = "recipient@example.com"
subject = "Prueba de correo electrónico usando contraseña de aplicación desde Gmail"
body = "Este es un correo electrónico enviado desde Gmail usando contraseña de aplicación."
message = MIMEText(body)
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, app_password)
server.sendmail(username, to_address, message.as_string())
print("¡El correo electrónico se ha enviado con Gmail!")
except Exception as e:
print("Error en el envío de correo:", e)
finally:
server.quit()
Resumen
Cuando se envían correos electrónicos desde Python a través de Gmail, la configuración de seguridad de la cuenta es importante. Al utilizar contraseñas de aplicación, se puede enviar correos de manera más segura. En la siguiente sección, introduciremos técnicas avanzadas de envío de correos en Python, incluyendo el envío a múltiples destinatarios, el envío automático periódico y métodos para enviar correos en japonés.

5. Edición avanzada: Técnicas avanzadas de envío de correos electrónicos
A partir de aquí, introduciremos técnicas avanzadas de envío de correos electrónicos en Python. Explicaremos métodos para responder a necesidades prácticas como el envío masivo a múltiples destinatarios, la automatización del envío de correos periódicos, el envío de correos en japonés, etc.
Envío masivo a múltiples destinatarios
Usando Python, es posible enviar correos a múltiples receptores de una vez. Configurando adecuadamente los campos «To», «Cc» y «Bcc» del correo y gestionando los destinatarios en una lista, se puede realizar el envío masivo fácilmente.
Ejemplo de código
A continuación, un ejemplo de código que especifica múltiples destinatarios en el campo «To».
import smtplib
from email.mime.text import MIMEText
# Información del servidor SMTP
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_app_password"
# Lista de destinatarios
to_addresses = ["recipient1@example.com", "recipient2@example.com"]
subject = "Prueba de envío de correo a múltiples destinatarios"
body = "Este es un correo enviado masivamente a múltiples destinatarios."
# Creación del correo
message = MIMEText(body)
message["From"] = username
message["To"] = ", ".join(to_addresses) # Separar múltiples destinatarios con comas
message["Subject"] = subject
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_addresses, message.as_string())
print("¡El correo a múltiples destinatarios se ha enviado!")
except Exception as e:
print("Error de envío de correo:", e)
finally:
server.quit()
Automatización del envío de correos periódicos
Para enviar correos periódicamente, es conveniente configurar un horario. Python cuenta con bibliotecas como «schedule» o el módulo «time» para ejecutar tareas regulares basadas en intervalos de tiempo. Por ejemplo, se puede ensamblar un script para enviar correos automáticamente en un momento específico.
Ejemplo de código (envío periódico usando schedule)
import smtplib
from email.mime.text import MIMEText
import schedule
import time
def send_email():
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_app_password"
to_address = "recipient@example.com"
subject = "Envío de correo periódico"
body = "Este es un correo enviado periódicamente."
message = MIMEText(body)
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_address, message.as_string())
print("¡El correo se ha enviado!")
except Exception as e:
print("Error de envío de correo:", e)
finally:
server.quit()
# Enviar correo todos los días a las 9:00 a. m.
schedule.every().day.at("09:00").do(send_email)
while True:
schedule.run_pending()
time.sleep(1)
Este script envía automáticamente correos todos los días a la hora especificada (en este caso, las 9:00 a. m.).
Envío de correos en japonés
Al enviar correos en japonés con Python, es necesario prestar atención a la codificación. Especialmente para asuntos y cuerpos que contienen japonés, configure para enviar correctamente usando codificación UTF-8.
Ejemplo de código (compatible con japonés)
import smtplib
from email.mime.text import MIMEText
from email.header import Header
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your_email@gmail.com"
password = "your_app_password"
to_address = "recipient@example.com"
# Asunto y cuerpo en japonés
subject = Header("Prueba de envío de correo en japonés", "utf-8")
body = "Este es un correo enviado en japonés desde Python."
message = MIMEText(body, "plain", "utf-8")
message["From"] = username
message["To"] = to_address
message["Subject"] = subject
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(username, password)
server.sendmail(username, to_address, message.as_string())
print("¡El correo en japonés se ha enviado!")
except Exception as e:
print("Error de envío de correo:", e)
finally:
server.quit()
Resumen
Hasta aquí, hemos introducido técnicas avanzadas de envío de correos electrónicos usando Python. Al aprovechar el envío masivo a múltiples destinatarios, la automatización del envío de correos periódicos y la compatibilidad con japonés, etc., se puede lograr un envío de correos más práctico. En la siguiente sección, resumiremos todo el artículo y repasaremos los puntos importantes.
6. Resumen
En este artículo, explicamos paso a paso cómo enviar correos electrónicos usando Python, desde los fundamentos hasta las aplicaciones avanzadas. Al utilizar la biblioteca estándar de Python «smtplib», es posible enviar correos electrónicos de manera sencilla, lo que permite su uso en tareas diarias o en aplicaciones.
A continuación, repasamos los puntos importantes aprendidos en cada sección.
- Pasos básicos para enviar correos electrónicos
- Aprendimos los pasos para enviar correos electrónicos a través de un servidor SMTP usando el módulo «smtplib» de Python.
- También explicamos el flujo desde la creación hasta el envío del correo, y la importancia del manejo de errores.
- Ejemplos de código prácticos para enviar correos
- Introdujimos métodos para enviar correos de texto, HTML y con archivos adjuntos, usando ejemplos de código para cada uno.
- Esto permite adaptar el código según el formato del correo y responder a diversas necesidades.
- Envío de correos usando Gmail
- Explicamos la configuración del servidor SMTP de Gmail y las medidas de seguridad usando contraseñas de aplicación.
- Confirmamos nuevamente que al usar una cuenta de Gmail, es necesario configurar la autenticación de dos factores y las contraseñas de aplicación.
- Técnicas avanzadas para enviar correos
- Introdujimos en detalle el envío masivo a múltiples destinatarios, la automatización del envío periódico de correos y los métodos para manejar japonés.
- Especialmente, mencionamos que la configuración de codificación es importante al enviar correos con asuntos o cuerpos en japonés.
Cómo aprovechar este artículo
Referenciando esta guía, podrás construir envíos automáticos de correos, sistemas de notificaciones periódicas o aplicaciones de notificación usando Python. Como habilidad útil en el trabajo, puedes usarla en atención al cliente, gestión operativa o como parte de servicios de notificación.
El envío de correos con Python es aplicable a diversas tareas y usos, y su conveniencia y versatilidad serán muy útiles en el negocio. Por favor, pruébalo en la práctica y aplícalo en tus proyectos.