Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

Mails: Doppelt - jemand ne Idee für ein Script?

Durch meine Mailkonzentratoren kommen einige Mails doppelt, ich klappere alle Accounts ab und sende an meinen Hauptaccount. Die manuelle Deduplizierung ist mir bekannt, Remove Duplicate Messages in Thunderbird z.B.
Die Deduplizierung möchte ich automatisieren, wenn Absender und Betreff gleich, dann die neuere Mail in den Papierkorb.
Es gibt ein Script für Imapfilter, allerdings bin ich nicht der große Scriptfachmann, wäre es möglich das das ein geschätzter Mitleser umschreiben könnte?

Danke!

Script:
seen = {}
duplicates = Set {}
results = account["Inbox"]:select_all()
for _, message in ipairs(results) do
mailbox, uid = table.unpack(message)
messageId = mailbox[uid]:fetch_field("Message-Id")
-- Remove prefix to ignore Id/ID difference.
messageId = string.sub(messageId, 12)
if seen[messageId] then
table.insert(duplicates, {mailbox, uid})
else
seen[messageId] = true
end
end
duplicates:mark_seen()
duplicates:move_messages(account["Trash"])

sudo apt autoremove —purge windows -y

Hallo @linuxopa,

versuch mal folgendes verändertes Skript:

*****

seen = {}
duplicates = Set {}
results = account["Inbox"]:select_all()

for _, message in ipairs(results) do
mailbox, uid = table.unpack(message)
sender = mailbox[uid]:fetch_field("From")
subject = mailbox[uid]:fetch_field("Subject")
date = mailbox[uid]:fetch_field("Date")
key = sender .. subject

if seen[key] then
if os.time(parse_date(date)) > os.time(parse_date(seen[key].date)) then
table.insert(duplicates, seen[key].message)
seen[key] = {date = date, message = {mailbox, uid}}
else
table.insert(duplicates, {mailbox, uid})
end
else
seen[key] = {date = date, message = {mailbox, uid}}
end
end

duplicates:move_messages(account["Trash"])

*****
Dieses Skript berücksichtigt nun Absender und Betreff für die Deduplizierung und behält die neuere E-Mail bei.
Es verwendet eine Kombination aus Absender ("From") und Betreff ("Subject") als Schlüssel für die Erkennung von Duplikaten und vergleicht die Datums-/Zeitstempel der E-Mails, um die neuere zu behalten. Die ältere E-Mail wird in den Papierkorb verschoben. Evtl. muss noch eine Funktion parse_date implementiert werden, um das Datum-/Zeitformat der E-Mails korrekt zu parsen...
Es sollte nun automatisch doppelte E-Mails erkennen, die älteren Versionen in den Papierkorb verschieben und die neueren beibehalten.
Viel Spaß beim Ausprobieren...

linuxopa hat auf diesen Beitrag reagiert.
Zitat von zebolon am 7. Januar 2025, 13:39 Uhr

Hallo @linuxopa,

versuch mal folgendes verändertes Skript: ...

DANKE!

Jetzt müssen erst mal die Mails eintrudeln, dann kann ich testen.

zebolon hat auf diesen Beitrag reagiert.
zebolon
sudo apt autoremove —purge windows -y