aboutsummaryrefslogtreecommitdiffstats
path: root/README.es.md
diff options
context:
space:
mode:
authorElvis Claros Castro <elvis@claros.ar>2026-09-26 18:47:40 -0300
committerElvis Claros Castro <elvis@claros.ar>2026-09-26 18:47:40 -0300
commitd9738b4be2add82ff955f061c79316b0dc91768f (patch)
treee0f31bb9f72dff315fc475f9e9f30322b69602ff /README.es.md
downloadposta-d9738b4be2add82ff955f061c79316b0dc91768f.tar.gz
posta-d9738b4be2add82ff955f061c79316b0dc91768f.zip
posta: generic IMAP/SMTP mail CLI with JSON outputHEADmain
Diffstat (limited to 'README.es.md')
-rw-r--r--README.es.md126
1 files changed, 126 insertions, 0 deletions
diff --git a/README.es.md b/README.es.md
new file mode 100644
index 0000000..765c840
--- /dev/null
+++ b/README.es.md
@@ -0,0 +1,126 @@
+# posta
+
+> *[Read this in English](README.md)*
+
+**posta** es un cliente de correo IMAP/SMTP chiquito y genérico para tu
+terminal. Un solo binario, salida JSON por defecto y cuentas con nombre en un
+archivo TOML — tu casilla queda tan scripteable como cualquier otra API.
+
+El nombre viene de las *postas*: las estaciones de relevo del correo colonial
+sudamericano. Y en Argentina, *la posta* es también lo genuino, la verdad.
+
+```console
+$ posta list --unread --max 3 --format table
+ UID DATE FROM SUBJECT
+ 7121 ● Fri, 17 Jul 2026 17:0… "Proveedor" <facturas@isp.ex… Tu factura está lista
+ 7120 ● Fri, 17 Jul 2026 15:0… Meetup <eventos@meetup.exam… 🚀 Inscripción abierta
+ 7119 ● Fri, 17 Jul 2026 10:1… "banco@example.com" Aviso de tarjeta
+
+$ posta search 'FROM banco UNSEEN' | jq .uids
+[7119, 7118, 7117]
+```
+
+## Características
+
+- **Funciona con cualquier proveedor** — IMAP/SMTP con STARTTLS (`imap://`,
+ `smtp://`) o TLS implícito (`imaps://`, `smtps://`). Tu propio servidor,
+ Gmail, Fastmail, lo que sea.
+- **Múltiples cuentas** — cuentas con nombre en un solo archivo, cambiadas
+ con `--account`, `$POSTA_ACCOUNT` o un `default_account`.
+- **Amigable para scripts** — todos los comandos imprimen JSON (canalizalo a
+ `jq`), con `--format table` para humanos.
+- **Secretos a tu manera** — contraseñas literales (posta revisa los permisos
+ del archivo y te avisa si están flojos) o `password_cmd` para sacarlas de
+ `pass`, un keyring o cualquier comando.
+- **Seguro por defecto** — leer nunca marca mensajes como leídos
+ (`BODY.PEEK` en todos lados); optás con `--mark-read` o `posta mark read`.
+- **Sin archivo de config si no querés** — todo puede venir de variables de
+ entorno `POSTA_*`, útil para CI y scripts sueltos.
+
+## Instalación
+
+```sh
+git clone https://git.all.ar/pub/posta.git
+cd posta
+cargo install --path .
+```
+
+## Configuración
+
+`~/.config/posta/config.toml` (o `$POSTA_CONFIG`, o `--config ARCHIVO`):
+
+```toml
+default_account = "personal"
+
+[accounts.personal]
+email = "alice@example.com"
+display_name = "Alice Example"
+imap_url = "imap://alice@example.com@mail.example.com:143"
+smtp_url = "smtp://alice@example.com@mail.example.com:587"
+password_cmd = "pass show mail/personal" # o: password = "..." (¡chmod 600!)
+
+[accounts.trabajo]
+email = "alice@work.example"
+imap_url = "imaps://alice@imap.work.example" # TLS implícito, puerto 993
+smtp_url = "smtps://alice@smtp.work.example" # TLS implícito, puerto 465
+password_cmd = "secret-tool lookup mail trabajo"
+sent_folder = "Sent Items"
+trash_folder = "Deleted"
+```
+
+El usuario de la URL puede contener `@`
+(`imap://alice@example.com@mail.example.com`); el host empieza después del
+*último*. `imap_password[_cmd]` / `smtp_password[_cmd]` pisan la contraseña
+compartida por protocolo cuando difieren.
+
+Las variables de entorno pisan cualquier campo de la cuenta elegida:
+`POSTA_IMAP_URL`, `POSTA_SMTP_URL`, `POSTA_PASSWORD`, `POSTA_PASSWORD_CMD`,
+`POSTA_IMAP_PASSWORD`, `POSTA_SMTP_PASSWORD`, `POSTA_EMAIL`,
+`POSTA_DISPLAY_NAME`, `POSTA_SENT_FOLDER`, `POSTA_TRASH_FOLDER`,
+más `POSTA_ACCOUNT` y `POSTA_CONFIG`.
+
+## Uso
+
+```sh
+posta accounts # cuentas configuradas
+posta status # totales y sin leer
+posta folders # listar carpetas
+posta list --unread # más recientes primero
+posta list --query 'FROM banco SINCE 1-Jul-2026'
+posta get 7119 # headers + cuerpo de texto, en JSON
+posta get 7119 --html # preferir la parte HTML
+posta get 7119 --raw > msg.eml # fuente RFC 822 crudo
+posta send --to bob@example.com --subject 'Hola' --body '¡Hola!'
+git log | posta send --to bob@example.com --subject 'Changelog'
+posta mark read 7119 7120 # también: unread, flagged, unflagged
+posta move 7119 --to Archives
+posta delete 7119 # mueve a la papelera
+posta search 'FROM banco UNSEEN' # IMAP SEARCH crudo, imprime UIDs
+```
+
+Flags globales: `--account/-a NOMBRE`, `--config ARCHIVO`,
+`--format json|table`, y `--folder` en los comandos que operan sobre una
+carpeta.
+
+Cada comando abre una sesión nueva y cierra al terminar; no hay demonio,
+caché ni estado local.
+
+## Notas
+
+- `send` guarda una copia en la carpeta de enviados vía IMAP (se omite con
+ `--no-record`).
+- `move`/`delete` usan `UID MOVE` si el servidor lo soporta, con fallback a
+ `COPY` + `\Deleted` + `EXPUNGE`.
+- TLS es siempre obligatorio; no hay conexiones en texto plano.
+
+## Desarrollo
+
+```sh
+cargo test # tests unitarios + integración del CLI, sin servidor
+cargo clippy --all-targets -- -D warnings
+cargo fmt --check
+```
+
+## Licencia
+
+[MIT](LICENSE)