fix parsing ricevute
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user