Miércoles, 28 de octubre de 2026  ·  LATAM / Español
Principiante 45 min en total 5 pasos

Cómo conectar Claude con Outlook paso a paso

Lee, resume y redacta correos de Outlook con la API de Claude y Microsoft Graph, en Python.

Daniel Puentes Prias
Consultor de IA · Actualizado el 25 de octubre de 2026
Imagen de portada editorial · Cómo conectar Claude con Outlook paso a paso · Educación · Claude Builders
Requisitos
  • Cuenta de Microsoft 365 / Outlook (personal o corporativa)
  • Una API key de Anthropic (console.anthropic.com)
  • Python 3.10+ instalado
  • Acceso al portal de Azure para registrar una app (cuenta gratuita sirve)
Lo que vas a aprender
  • Registrar una app en Azure para acceder a tu buzón de Outlook vía Microsoft Graph
  • Autenticarte y leer tus correos recientes desde Python
  • Enviar esos correos a Claude (claude-opus-4-8) para resumirlos o clasificarlos
  • Generar borradores de respuesta automáticos con Claude
PASO 1 · ~12 min

Registrar la app en Azure

Claude no se conecta directamente a Outlook: el puente es Microsoft Graph, la API oficial de Microsoft 365. Primero necesitas una identidad para tu script. Entra en portal.azure.com, busca 'Microsoft Entra ID' (antes Azure AD) y ve a 'Registros de aplicaciones' > 'Nuevo registro'. Ponle un nombre como 'claude-outlook', elige 'Cuentas en cualquier directorio organizativo y cuentas personales' y en URI de redirección selecciona 'Cliente público/nativo' con el valor http://localhost. Guarda. En la página de la app apunta el 'ID de aplicación (cliente)' y el 'ID de directorio (inquilino)'. Luego ve a 'Permisos de API' > 'Agregar un permiso' > Microsoft Graph > 'Permisos delegados' y añade Mail.Read, Mail.Send y User.Read. Pulsa 'Conceder consentimiento de administrador' si tu cuenta lo permite. Esto autoriza a tu futuro script a leer y enviar correo en tu nombre.

ConsejoGuarda el Client ID y el Tenant ID en un gestor de notas seguro; los usarás en el paso 3.
Error comúnSi usas una cuenta corporativa, tu organización puede bloquear el consentimiento. Pide ayuda a TI o usa una cuenta Microsoft personal para practicar.
PASO 2 · ~6 min

Preparar el entorno de Python

Vamos a instalar las dos librerías clave: el SDK oficial de Anthropic para hablar con Claude y MSAL de Microsoft para la autenticación con Graph. Crea una carpeta para el proyecto y, dentro, un entorno virtual para no ensuciar tu Python global. En España y LATAM recomiendo trabajar siempre en entornos virtuales para evitar conflictos de versiones. Luego instalas las dependencias y guardas tus credenciales como variables de entorno en lugar de pegarlas en el código: así evitas subirlas por accidente a GitHub.

bash
python -m venv .venv
source .venv/bin/activate   # en Windows: .venv\Scripts\activate
pip install anthropic msal requests

# Guarda tus credenciales (ajusta los valores)
export ANTHROPIC_API_KEY="sk-ant-..."
export AZURE_CLIENT_ID="tu-client-id"
export AZURE_TENANT_ID="tu-tenant-id"
ConsejoEn Windows PowerShell usa $env:ANTHROPIC_API_KEY="sk-ant-..." en vez de export.
Error comúnNunca escribas la API key directamente en el .py. Si la subes a un repo público, Anthropic la revocará automáticamente.
PASO 3 · ~10 min

Autenticarte y leer correos con Microsoft Graph

Ahora conectamos con Outlook. Usaremos el flujo de 'device code' de MSAL: el script te mostrará un código y una URL; abres la URL en el navegador, pegas el código e inicias sesión con tu cuenta de Outlook. Es el método más simple para apps de escritorio y no requiere gestionar secretos de cliente. Una vez autenticado, MSAL devuelve un token de acceso que pasamos a la API de Graph para pedir los últimos correos de tu bandeja de entrada. El endpoint /me/messages soporta parámetros como $top (cuántos) y $select (qué campos) para no descargar datos de más.

python
import os, msal, requests

CLIENT_ID = os.environ["AZURE_CLIENT_ID"]
TENANT_ID = os.environ["AZURE_TENANT_ID"]
SCOPES = ["Mail.Read", "Mail.Send"]

app = msal.PublicClientApplication(
    CLIENT_ID, authority=f"https://login.microsoftonline.com/{TENANT_ID}"
)
flow = app.initiate_device_flow(scopes=SCOPES)
print(flow["message"])  # abre la URL y pega el codigo
result = app.acquire_token_by_device_flow(flow)
token = result["access_token"]

headers = {"Authorization": f"Bearer {token}"}
url = "https://graph.microsoft.com/v1.0/me/messages?$top=5&$select=subject,from,bodyPreview"
correos = requests.get(url, headers=headers).json()["value"]
for c in correos:
    print(c["subject"], "-", c["from"]["emailAddress"]["address"])
ConsejoUsa $filter=isRead eq false para procesar solo los correos no leídos.
Error comúnEl token caduca en ~1 hora. Para producción implementa refresh tokens; para este tutorial basta con re-ejecutar el login.
PASO 4 · ~7 min

Enviar los correos a Claude para resumirlos

Con los correos en memoria, se los pasamos a Claude. Montamos un prompt que incluye asunto, remitente y vista previa de cada mensaje, y le pedimos un resumen accionable con prioridad. Aquí usamos el modelo claude-opus-4-8, el más capaz para entender contexto y matices en español. La clave es dar instrucciones claras: formato de salida, idioma y qué queremos destacar. Claude procesa todo en una sola llamada y devuelve un resumen limpio que podrías enviarte a ti mismo o volcar en un informe diario.

python
import anthropic

client = anthropic.Anthropic()  # lee ANTHROPIC_API_KEY del entorno

listado = "\n\n".join(
    f"De: {c['from']['emailAddress']['address']}\n"
    f"Asunto: {c['subject']}\n"
    f"Resumen: {c['bodyPreview']}" for c in correos
)

msg = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": f"Resume estos correos de mi bandeja en español. "
                   f"Para cada uno indica prioridad (alta/media/baja) "
                   f"y si requiere respuesta:\n\n{listado}"
    }]
)
print(msg.content[0].text)
ConsejoBaja max_tokens si solo quieres titulares; súbelo si pides respuestas completas.
Error comúnNo envíes correos con datos sensibles sin revisar la política de privacidad de tu empresa. Anonimiza si es necesario.
PASO 5 · ~8 min

Generar y enviar un borrador de respuesta

El último paso cierra el círculo: pedimos a Claude que redacte una respuesta a un correo concreto y la enviamos de vuelta por Outlook con el endpoint sendMail de Graph. Elegimos el primer correo del listado como ejemplo. Claude genera el cuerpo en tono profesional y en español; tú siempre deberías revisarlo antes de que salga. El payload de sendMail usa formato JSON con el asunto, el cuerpo y el destinatario. Al ejecutar, el correo se envía desde tu propia cuenta de Outlook.

python
objetivo = correos[0]

borrador = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=600,
    messages=[{"role": "user", "content":
        f"Redacta una respuesta breve y profesional en español a este correo:\n"
        f"Asunto: {objetivo['subject']}\nContenido: {objetivo['bodyPreview']}"}]
).content[0].text

payload = {
    "message": {
        "subject": f"RE: {objetivo['subject']}",
        "body": {"contentType": "Text", "content": borrador},
        "toRecipients": [{"emailAddress": {
            "address": objetivo["from"]["emailAddress"]["address"]}}]
    }
}
r = requests.post("https://graph.microsoft.com/v1.0/me/sendMail",
                  headers=headers, json=payload)
print("Enviado" if r.status_code == 202 else r.text)
ConsejoAñade un paso de confirmación por consola (input()) antes de enviar para no mandar borradores sin revisar.
Error comúnsendMail devuelve código 202 (sin cuerpo) cuando tiene éxito. Si esperas 200 pensarás que falló.
Resultado

Has construido un puente funcional entre Claude y Outlook: tu script se autentica con Microsoft Graph, lee los correos recientes de tu bandeja, los resume y prioriza con claude-opus-4-8, y hasta redacta y envía respuestas automáticas. Es una base sólida que puedes convertir en un asistente de correo diario. Si quieres entender mejor los fundamentos antes de automatizar más, te vendrá bien un curso para empezar con Claude desde cero y ganar soltura con prompts y la consola.

PRÓXIMOS PASOS