¿Por qué es necesario en 2025? 🕒
El correo sigue siendo el principal canal de comunicación con clientes y socios. De hecho, el 60-80% de los correos entrantes son rutinarios: confirmaciones, preguntas repetidas, «buenos días, dígame...». El bot libera horas a la semana, acelera la respuesta al usuario y reduce la probabilidad de que los correos electrónicos se «atasquen».

Qué vamos a construir ⚙️
Mini-bot en IMAP + SMTP para la respuesta automática básica.
Enrutamiento por palabras clave (por ejemplo, «pago», «colaboración»).
Resumen de «cómo cambiar» a Gmail API (OAuth 2.0) para mayor fiabilidad.
Plan de despliegue: cron / APScheduler, registro, Docker.
Seguridad mínima: .env, contraseña de la aplicación, limitación de frecuencia.
A continuación se muestra la versión de trabajo mínima.
# pip install python-dotenv
import os, imaplib, smtplib, email
from email.mime.text import MIMEText
from dotenv import load_dotenv
load_dotenv()
IMAP = os.getenv("IMAP_SERVER", "imap.gmail.com")
SMTP = os.getenv("SMTP_SERVER", "smtp.gmail.com")
EMAIL = os.getenv("EMAIL_ADDRESS")
PASS = os.getenv("EMAIL_PASSWORD") # Contraseña de la aplicación para Gmail
def send_reply(to_addr:str, subject:str):
msg = MIMEText("Thank you! We have received your letter and will reply as soon as possible.")
msg["Subject"] = f"Re: {subject or ''}".strip()
msg["From"] = EMAIL
msg["To"] = to_addr
with smtplib.SMTP_SSL(SMTP, 465) as smtp:
smtp.login(EMAIL, PASS)
smtp.sendmail(EMAIL, [to_addr], msg.as_string())
with imaplib.IMAP4_SSL(IMAP) as imap:
imap.login(EMAIL, PASS)
imap.select("INBOX")
status, data = imap.search(None, '(UNSEEN)')
ids = data[0].split()
for msg_id in ids:
_, raw = imap.fetch(msg_id, "(RFC822)")
msg = email.message_from_bytes(raw[0][1])
sender = email.utils.parseaddr(msg.get("From",""))[1]
subj = msg.get("Subject","")
if sender:
send_reply(sender, subj)
# marcar como leído
imap.store(msg_id, '+FLAGS', '\\Seen')💡 Consejo: durante las pruebas, añade el «modo seco» (dry-run) para registrar las acciones en lugar de enviarlas realmente.
Más inteligente: respuestas por palabras clave 🧭
La lógica más simple: miramos el tema y el cuerpo de la carta, elegimos una plantilla de respuesta.
KEYMAP = {
"payment": "Regarding payment: the invoice has been sent, the terms are 1-2 banking days. If you need an act, please reply to this letter.",
"cooperation": "Thank you for your interest! Please write briefly about your audience and format, and we will get back to you with a proposal.",
"Technical support": "Describe the playback steps and send screenshots/logs — we will help you promptly."
}
DEFAULT = "Thank you for your letter! We are in touch and will get back to you as soon as possible."
def choose_reply(subject:str, body:str) -> str:
text = f"{subject} {body}".lower()
for key, template in KEYMAP.items():
if key in text:
return template
return DEFAULTSe puede ampliar a una simple «intención»: buscar varias claves, contar el «peso» de las coincidencias y elegir la mejor plantilla.
Despliegue y operación 🚀
Planificador: cron,
APSchedulero systemd-timer.Docker: fija la versión de Python y las dependencias, conecta
.envcomo secreto.Registros: nivel de INFORMACIÓN para un funcionamiento normal y ADVERTENCIA/ERROR para fallos; enviar errores a Telegram/Slack.
Limitación de frecuencia: no responda más de una vez a la dirección en un día; mantenga un caché de «respuestas de las últimas 24 horas».
A/B: prueba los textos de respuesta automática y el asunto del correo electrónico, ya que afecta a la comunicación posterior.
Seguridad y ética 🔒
Guarda los secretos en
.env, usa App Password o OAuth 2.0, no confirmar los tokens en el repositorio.Añade a la respuesta «has recibido una respuesta automática» y una forma de contactar a la persona.
Mantenga una lista blanca de dominios/direcciones para acciones automáticas; deje los correos electrónicos controvertidos para el análisis manual.
Cumple con la política del proveedor de correo electrónico y la ley de datos personales.
📊 Qué puede hacer un bot de correo en Python
Guion | Qué hace el bot | Beneficios |
|---|---|---|
Respuesta automática | «Gracias, hemos recibido la carta» + plazo de espera | Elimina la rutina, acelera la primera respuesta |
Filtración | Lo pone en carpetas: «pago», «cooperación», «soporte» | Bandeja de entrada sin caos |
Reenvío | Envía preguntas sobre pagos al contador, integraciones al soporte técnico | Enrutamiento rápido |
Palabras clave | Selecciona una plantilla según el contenido del correo electrónico | Respuestas más relevantes |
Integración con CRM | Crea un cliente potencial/oportunidad, trae un contacto | Embudo transparente |
Respuesta de IA | Genera texto a través de LLM a partir de un breve resumen de la carta | Tono humano, menos trabajo manual |

Ideas de actualización 💡
Resumen de la carta: extrae un resumen breve y sustitúyelo en la respuesta.
Plantillas con variables: nombre del remitente, número de pedido, fecha límite.
Antibucle: no responder a respuestas automáticas/no-reply, comprobar encabezados
Auto-Submitted.Multilingüismo: determina el idioma de la carta y selecciona una plantilla.
📎 Guarda las plantillas en JSON/YAML y realiza cambios sin publicar código.
En Codice hacemos que el aprendizaje de la programación sea emocionante y comprensible: tenemos cursos interesantes con tareas que ayudan a mejorar las habilidades paso a paso.
Y también tenemos un canal de telegram, donde discutimos ideas geniales, compartimos experiencias y analizamos juntos las tareas: aprender no solo es útil, sino también divertido.
Deja un comentario: ¿qué escenario de respuesta automática necesitas exactamente: «pago», «soporte», «cooperación» o algo propio?
