Mails: Doppelt - jemand ne Idee für ein Script?
Zitat von linuxopa am 7. Januar 2025, 9:10 UhrDurch 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"])
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"])
Zitat von zebolon am 7. Januar 2025, 13:39 UhrHallo @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 .. subjectif 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
endduplicates: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 Funktionparse_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...
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...
Zitat von linuxopa am 7. Januar 2025, 14:16 UhrZitat von zebolon am 7. Januar 2025, 13:39 UhrHallo @linuxopa,
versuch mal folgendes verändertes Skript: ...
DANKE!
Jetzt müssen erst mal die Mails eintrudeln, dann kann ich testen.
Zitat von zebolon am 7. Januar 2025, 13:39 UhrHallo @linuxopa,
versuch mal folgendes verändertes Skript: ...
DANKE!
Jetzt müssen erst mal die Mails eintrudeln, dann kann ich testen.