
Cansado de borrar correos? Aprende a conectar a tu buzón vía IMAP y a vaciar la papelera con un script en Python. Te lo explico paso a paso. ¡Automatiza ya!
Mi buzón de correo se estaba llenando y el proceso de borrar mensajes uno por uno para luego vaciar la papelera era un fastidio total. Como desarrollador, mi primer instinto fue: "Tiene que haber una forma de automatizar esto". Así que creé un script de Python sencillo para hacer precisamente eso: conectarse a mi cuenta de correo y dejar la carpeta de la papelera impecable. Es un script pequeño, pero me ahorra tiempo y mantiene mi bandeja de entrada ordenada. Hoy quiero mostrarte cómo puedes construir el tuyo, y de paso, aprenderemos un poco sobre el protocolo IMAP.
1. ¿Qué es IMAP y por qué lo usamos?
IMAP son las siglas de Internet Message Access Protocol. Piensa en él como si fuera el API
de tu correo electrónico. A diferencia del antiguo protocolo POP3, que descargaba los correos y los eliminaba del servidor, IMAP trabaja directamente sobre el servidor. Esto te permite manipular carpetas, mover correos, marcarlos como leídos y, lo más importante para nosotros, borrarlos de forma permanente. Usaremos IMAP porque nos proporciona el control que necesitamos para seleccionar la carpeta "Papelera" y vaciarla.
2. Preparando nuestro script de Python
Primero, lo básico. No necesitas instalar nada súper exótico. Python ya viene con la librería imaplib
por defecto, que es todo lo que necesitamos para comunicarnos con el servidor IMAP. También usaremos os
para cargar nuestras credenciales de forma segura desde variables de entorno.
✅ Correcto: Nunca, pero nunca, escribas tu contraseña directamente en el código. ¡Es una pésima práctica de seguridad!
❌ Incorrecto:
# NO HAGAS ESTO. ¡NUNCA!
user = "tu_correo@ejemplo.com"
password = "tu_contraseña_super_secreta"
En su lugar, vamos a usar variables de entorno. Crea un archivo .env
en la raíz de tu proyecto (y asegúrate de añadirlo a tu .gitignore
).
# .env
EMAIL_USER="tu_correo@ejemplo.com"
EMAIL_PASS="tu_contraseña_o_app_password"
IMAP_SERVER="imap.tu_proveedor.com"
Para cargar estas variables en tu script de Python, puedes usar la librería python-dotenv
. Si no la tienes, instálala:
pip install python-dotenv
3. Conectando y autenticando
Ahora sí, vamos al código. Lo primero es importar las librerías necesarias, cargar las variables de entorno y establecer la conexión con el servidor IMAP usando SSL para una conexión segura.
import imaplib
import os
from dotenv import load_dotenv
# Carga las variables de entorno desde el archivo .env
load_dotenv()
USER = os.getenv('EMAIL_USER')
PASSWORD = os.getenv('EMAIL_PASS')
IMAP_SERVER = os.getenv('IMAP_SERVER')
# Conexión al servidor IMAP a través de SSL
try:
imap = imaplib.IMAP4_SSL(IMAP_SERVER)
# Login
status, messages = imap.login(USER, PASSWORD)
print(f"Conexión exitosa: {status}")
except Exception as e:
print(f"Error al conectar o autenticar: {e}")
exit()
Un detalle importante: Muchos proveedores de correo (como Gmail) requieren que generes una "Contraseña de Aplicación" para usarla con scripts como este, en lugar de tu contraseña principal.
4. Seleccionando y vaciando la Papelera
Una vez autenticados, el proceso es simple:
- Seleccionamos la carpeta que queremos limpiar. El nombre puede variar (
'Trash'
,'Papelera'
,'[Gmail]/Trash'
). - Buscamos todos los mensajes en esa carpeta.
- Marcamos cada mensaje para ser borrado (
\Deleted
). - Expulsamos (o purgamos) la carpeta para que los cambios se apliquen y los mensajes se borren permanentemente.
Aquí está el código que hace la magia:
# ... (código de conexión anterior)
try:
# 1. Seleccionar la carpeta de la papelera
# El nombre puede variar, usa imap.list() para ver las carpetas disponibles
# Para Gmail suele ser '[Gmail]/Trash'
status, messages = imap.select('[Gmail]/Trash')
if status == 'OK':
print(f"Carpeta de papelera seleccionada. Mensajes: {messages[0].decode('utf-8')}")
# 2. Buscar todos los mensajes en la carpeta
status, search_data = imap.search(None, 'ALL')
message_ids = search_data[0].split()
if not message_ids:
print("La papelera ya está vacía. ¡Buen trabajo!")
else:
print(f"Encontrados {len(message_ids)} mensajes para borrar.")
# 3. Marcar todos los mensajes para ser borrados
for msg_id in message_ids:
imap.store(msg_id, '+FLAGS', '\\Deleted')
# 4. Purgar la carpeta para borrarlos permanentemente
status, purge_data = imap.expunge()
print(f"Papelera vaciada. {len(purge_data)} mensajes eliminados permanentemente.")
else:
print(f"No se pudo seleccionar la carpeta de la papelera: {messages}")
finally:
# Siempre cierra la conexión
imap.close()
imap.logout()
print("Conexión cerrada.")
Y listo. Con este script, puedes crear un cron job
o una tarea programada para que se ejecute una vez a la semana y mantener tu buzón limpio sin mover un dedo. ¡Pequeñas automatizaciones que marcan la diferencia!
Otros proyectos en mi perfil de GitHub.