18 lines
707 B
Python
18 lines
707 B
Python
"""Cálculo de huellas (fingerprints) para detectar mensajes ya migrados.
|
|
|
|
Los UID de IMAP no son estables entre servidores, así que la identidad de un
|
|
mensaje se basa preferentemente en su ``Message-ID``. Cuando el mensaje no
|
|
tiene ``Message-ID`` (raro, pero ocurre con correo mal formado), se recurre a
|
|
una combinación de tamaño y fecha interna.
|
|
"""
|
|
|
|
import hashlib
|
|
|
|
|
|
def compute_fingerprint(message_id: str | None, size: int, internaldate_raw: str, extra: str | None = None) -> str:
|
|
if message_id:
|
|
return "mid:" + message_id.strip()
|
|
base = f"{size}:{internaldate_raw}:{extra or ''}"
|
|
digest = hashlib.sha256(base.encode("utf-8", "replace")).hexdigest()
|
|
return "nomid:" + digest
|