Skip to content

Latest commit

 

History

History
104 lines (90 loc) · 3.82 KB

File metadata and controls

104 lines (90 loc) · 3.82 KB

pec-cli — Istruzioni specifiche

Cosa fa

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.

Come funziona la PEC tecnicamente

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.

Autenticazione

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 0600

Provider supportati: aruba, legalmail, namirial, register, poste, pec.it.

Comandi disponibili

Tutti implementati (v0.2.0). Aggiungi --json per output NDJSON parsabile.

Lettura

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 RFC

Organizzazione

pec list-folders [--counts]
pec mark-read <id>  /  pec mark-unread <id>
pec move <id> --to "<cartella>" [--from inbox]

Invio (atto legale — conferma obbligatoria)

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.

Auth

pec auth login --address xxx@pec.it --provider aruba
pec auth status
pec auth logout

Struttura file

pec-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/

Note importanti

  • Password nel keyring di sistema; fallback su file Fernet cifrato (0600) su host headless
  • Le PEC hanno ricevute di accettazione/consegna — pec_type le segnala nella lista, pec trace ricostruisce la catena per Message-ID
  • Gli allegati di certificazione (daticert.xml, postacert.eml, smime.p7*) sono nascosti di default; --cert mostra i campi parsati, --verbose i file grezzi
  • Inviare è un atto legale: conferma interattiva o --yes esplicito, mai in autonomia dall'agente
  • Testare con un account PEC reale (non esiste sandbox pubblica)