CLI per leggere e inviare PEC (Posta Elettronica Certificata) da terminale. Permette a un agente AI di gestire comunicazioni PEC senza aprire il browser o il client email.
La PEC usa protocolli standard (IMAP/SMTP) ma con server certificati. I principali provider italiani e i loro server:
| Provider | IMAP | SMTP |
|---|---|---|
| Aruba PEC | imaps.pec.aruba.it:993 | smtps.pec.aruba.it:465 |
| Legalmail (InfoCert) | imapmail.legalmail.it:993 | smtpmail.legalmail.it:465 |
| Namirial | imap.namirialpec.it:993 | smtp.namirialpec.it:465 |
| Register.it | imap.pec.register.it:993 | smtp.pec.register.it:465 |
| Poste Italiane | imappec.poste.it:993 | smtppec.poste.it:465 |
| Pec.it | imap.pec.it:993 | smtp.pec.it:465 |
Tutti usano SSL/TLS. Auth: username (indirizzo PEC completo) + password.
pec auth login --address mia@pec.it --provider aruba
# chiede la password interattivamente (mai passarla come flag)
# la password va nel keyring di sistema (service "mayai-cli-pec");
# su host headless c'è il fallback su ~/.config/mayai-cli/pec/credentials.json
# (cifrato con Fernet + key.bin), entrambi con permessi 0600Provider supportati: aruba, legalmail, namirial, register, poste, pec.it.
Tutti implementati (v0.2.0). Aggiungi --json per output NDJSON parsabile.
pec list [--folder sent] [--unread] [--from 2025-01-01] [--limit N]
pec get <id> [--cert] [--save-attachments DIR] [--folder sent]
pec search <query> [--field subject|from|body|all] [--from-date YYYY-MM-DD]
pec trace <message-id> # catena ricevute per Message-ID RFCpec list-folders [--counts]
pec mark-read <id> / pec mark-unread <id>
pec move <id> --to "<cartella>" [--from inbox]pec send --to dest@pec.it --subject "Oggetto" --body "Testo"
pec send --to dest@pec.it --subject "Oggetto" --file body.txt --attach doc.pdf
# TTY: chiede conferma. Shell non interattiva: richiede --yes (altrimenti exit 3).
# --dry-run valida senza contattare l'SMTP.pec auth login --address xxx@pec.it --provider aruba
pec auth status
pec auth logoutpec-cli/
├── AGENTS.md
├── README.md
├── pyproject.toml
├── Makefile
├── pec_cli/
│ ├── __init__.py
│ ├── main.py # comandi CLI (click)
│ ├── mcp_server.py # server MCP (tool pec_*)
│ ├── daticert.py # parsing daticert.xml (ricevute)
│ ├── retry.py # backoff su errori IMAP/SMTP transienti
│ ├── imap/
│ │ ├── __init__.py
│ │ └── client.py # connessione IMAP + lettura
│ ├── smtp/
│ │ ├── __init__.py
│ │ └── sender.py # invio SMTP
│ ├── auth/
│ │ ├── __init__.py
│ │ └── credentials.py # salvataggio credenziali cifrate
│ ├── models/
│ │ ├── __init__.py
│ │ └── message.py # dataclass Messaggio PEC
│ └── output/
│ ├── __init__.py
│ └── formatter.py
└── tests/
- Password nel keyring di sistema; fallback su file Fernet cifrato (0600) su host headless
- Le PEC hanno ricevute di accettazione/consegna —
pec_typele segnala nella lista,pec tracericostruisce la catena per Message-ID - Gli allegati di certificazione (
daticert.xml,postacert.eml,smime.p7*) sono nascosti di default;--certmostra i campi parsati,--verbosei file grezzi - Inviare è un atto legale: conferma interattiva o
--yesesplicito, mai in autonomia dall'agente - Testare con un account PEC reale (non esiste sandbox pubblica)