fix parsing ricevute

This commit is contained in:
2026-06-18 16:31:29 +02:00
parent 4c90a7c1a3
commit 058c550cd2
10 changed files with 731 additions and 15 deletions
+22 -7
View File
@@ -174,23 +174,38 @@ def detect_protocol(msg: email.message.Message) -> str:
"""
Determina il protocollo di un messaggio in arrivo.
Logica di rilevamento automatico:
- Se il messaggio contiene almeno un header X-REM-*, il protocollo e' REM europea
- Altrimenti e' PEC italiana (default)
Logica di rilevamento automatico (priorita' decrescente):
1. Se presenti header PEC-IT specifici (X-Ricevuta, X-TipoRicevuta, X-Trasporto)
→ protocollo e' PEC italiana, indipendentemente da altri header.
2. Se presenti header X-REM-* SENZA header PEC-IT
→ protocollo e' REM europea (ETSI EN 319 532-4)
3. Default → PEC italiana
Questo permette al worker di usare il parser corretto (classify_rem_message vs
classify_pec_message) anche per caselle configurate come 'pec_it' che potrebbero
ricevere messaggi REM da partner europei (caso edge).
IMPORTANTE: Aruba PEC aggiunge header X-REM-* (es. X-REM-Subject) anche ai
messaggi PEC-IT standard, come parte di una migrazione verso lo standard ETSI
REM. Questi header non devono essere interpretati come protocollo REM europeo
quando gli header PEC-IT (X-Ricevuta, X-TipoRicevuta) sono anch'essi presenti.
In tal caso la classificazione PEC-IT ha priorita'.
Args:
msg: oggetto email.message.Message gia' parsato dagli header
Returns:
'rem_eu' se header X-REM-* rilevati, 'pec_it' altrimenti.
'pec_it' se header PEC-IT specifici presenti (o nessun header REM),
'rem_eu' se header X-REM-* presenti senza header PEC-IT specifici.
"""
# Controlla prima gli header PEC-IT specifici: hanno priorita' assoluta.
# Questi header identificano in modo univoco un messaggio PEC italiana.
_PEC_IT_SPECIFIC = {"X-RICEVUTA", "X-TIPORICEVUTA", "X-TRASPORTO"}
for header_name in msg.keys():
if header_name.upper() in _PEC_IT_SPECIFIC:
return "pec_it"
# Nessun header PEC-IT trovato: verifica header REM europea
for header_name in msg.keys():
if header_name.upper().startswith("X-REM-"):
return "rem_eu"
return "pec_it"