gmail-cli: correo electrónico multiplataforma desde la línea de comandos

Rol: Desarrollador

Tecnologías: Python 3, SMTP de Gmail, CLI multiplataforma

Plataformas: macOS, Linux, Windows

Una herramienta Python sin dependencia que le permite enviar correos electrónicos desde la línea de comandos mediante SMTP de Gmail. Instálelo con un solo comando, configúrelo una vez y envíe correos electrónicos desde scripts, flujos de trabajo de automatización o agentes de IA.

El problema

Enviar correos electrónicos desde la línea de comando ha sido tradicionalmente doloroso:

Necesitaba una forma sencilla de enviar correos electrónicos desde scripts de automatización, agentes de IA y canalizaciones de CI/CD sin tener que luchar con la configuración del servidor de correo. Los servidores SMTP de Gmail tienen una excelente capacidad de entrega y las contraseñas de aplicaciones brindan autenticación segura sin exponer la contraseña de su cuenta principal.

La solución

gmail-cli es un único archivo Python sin dependencias externas que funciona en cualquier sistema con Python 3. Utiliza los servidores SMTP de Gmail para una entrega confiable y almacena las credenciales de forma segura en su directorio personal.

Instalación unifilar

macOS/Linux

curl -sSL https://colinknapp.com/tools/gmail-cli/install.sh | bash

WindowsPowerShell

iwr -useb https://colinknapp.com/tools/gmail-cli/install.ps1 | iex

El instalador descarga el script a ~/.local/bin (Unix) o %LOCALAPPDATA%\gmail-cli (Windows) y lo agrega a su RUTA.

Configuración: Contraseña de la aplicación Gmail

Gmail requiere una contraseña de aplicación para el acceso SMTP (su contraseña habitual no funcionará con 2FA habilitado). Aquí se explica cómo configurar uno:

  1. Ir a myaccount.google.com/apppasswords
  2. Habilite la verificación en dos pasos si aún no lo ha hecho
  3. Genere una contraseña de aplicación para "Correo"
  4. correr gmail-cli configure e ingrese su dirección de Gmail y la contraseña de la aplicación
gmail-cli configure
Gmail CLI Configuration
----------------------------------------

You'll need a Gmail App Password:
1. Go to https://myaccount.google.com/apppasswords
2. Enable 2-Step Verification if needed
3. Generate an App Password for 'Mail'

Gmail address: yourname@gmail.com
App Password (will be stored locally): xxxx xxxx xxxx xxxx

Configuration saved to /home/user/.config/gmail-cli/config.json

Ejemplos de uso

Correo electrónico sencillo

gmail-cli send recipient@example.com -s "Hello" -b "Hi there!"

Correo electrónico con archivos adjuntos

gmail-cli send recipient@example.com \
  -s "Weekly Report" \
  -b "Please find the report attached." \
  -a report.pdf \
  -a data.csv

Contenido de tubería desde stdin

cat logfile.txt | gmail-cli send admin@example.com -s "Server Logs"

Conexión de prueba

gmail-cli test
Testing connection for yourname@gmail.com...
Success! Connection and authentication working.

Caso de uso del mundo real: correo electrónico de agente de IA

Creé esta herramienta específicamente para usar con agentes de codificación de IA como Cursor. Cuando necesito enviar un correo electrónico con archivos adjuntos en PDF, el agente de IA puede redactarlo y enviarlo directamente:

gmail-cli send recipient@example.com \
  -s "Documents Attached" \
  -b "Hi,

Please find the requested documents attached.

Best regards,
Your Name" \
  -a document1.pdf \
  -a document2.pdf

Esto permite la automatización de un extremo a otro: la IA puede generar documentos, crear archivos PDF y enviarlos por correo electrónico sin intervención humana.

Implementación técnica

Arquitectura

Consideraciones de seguridad

Soporte multiplataforma

La herramienta maneja las diferencias de plataforma automáticamente:

Referencia de comando

Comando Descripción
gmail-cli configure Configurar credenciales de Gmail (interactivo)
gmail-cli configure --email x --password y Establecer credenciales de forma no interactiva
gmail-cli send TO -s SUBJ -b BODY enviar un correo electrónico
gmail-cli send TO -s SUBJ -a FILE Enviar con archivos adjuntos
gmail-cli test Probar la conexión SMTP
gmail-cli config Mostrar configuración actual

Integración con la automatización

gmail-cli funciona perfectamente con:

Ejemplo: Informe de copia de seguridad diario

#!/bin/bash
# backup-report.sh - Run daily via cron

BACKUP_LOG="/var/log/backup.log"
RECIPIENT="admin@example.com"

if [ -f "$BACKUP_LOG" ]; then
    cat "$BACKUP_LOG" | gmail-cli send "$RECIPIENT" \
        -s "Daily Backup Report - $(date +%Y-%m-%d)"
fi

¿Por qué no utilizar las herramientas existentes?

Alternativa Problema
enviar correo/postfix Requiere raíz, configuración compleja y problemas de entrega
msmtp Dependencia externa, sintaxis del archivo de configuración
correox/correo Específico de la plataforma, requiere MTA local
Python smtplib directamente Código repetitivo, sin interfaz CLI

gmail-cli proporciona la simplicidad de una herramienta CLI con la confiabilidad de la infraestructura de Gmail, envuelto en un paquete sin dependencia que funciona en todos los lugares donde se ejecuta Python.

Observaciones

  1. Las instalaciones de una sola línea funcionan: el curl | bash El patrón, aunque controvertido, reduce drásticamente la fricción para las herramientas de desarrollo.
  2. SMTP de Gmail es confiable: Los servidores de Google tienen una excelente capacidad de entrega y tiempo de actividad.
  3. Las contraseñas de aplicaciones están subestimadas: Proporcionan acceso con alcance sin exponer sus credenciales principales.
  4. Asuntos multiplataforma: Una herramienta que funciona de manera idéntica en macOS, Linux y Windows ahorra documentación y esfuerzo de soporte
  5. Los agentes de IA necesitan correo electrónico: A medida que crece la automatización impulsada por LLM, el correo electrónico programático simple se vuelve cada vez más valioso

Get Started

Instala gmail-cli y comienza a enviar correos electrónicos desde tu terminal:

# Install (macOS/Linux)
curl -sSL https://colinknapp.com/tools/gmail-cli/install.sh | bash

# Configure
gmail-cli configure

# Send your first email
gmail-cli send yourself@gmail.com -s "Test" -b "It works!"