"""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