E-Mail-Regeln manuell bearbeiten

Ich möchte die folgende .plist-Datei manuell bearbeiten:

/Users/<myname>/Library/Mail/V5/MailData/SyncedRules.plist

Weil ich viel Spam bekomme und das Hinzufügen jeder Spammer-Adresse zu den Regeln mit Mail unpraktisch ist:

Geben Sie hier die Bildbeschreibung ein

und es gibt viele Adressen, die hinzugefügt werden müssen. Da ich ein bisschen bash scripting, sed und awk kenne, denke ich darüber nach, ein Skript zu schreiben, das automatisch die Adressen aus ausgewählten E-Mails zur obigen plist-Datei hinzufügt.

Geben Sie hier die Bildbeschreibung ein


Also, was ist meine Frage?

Abschließend sollte das Skript für jede Spammer-Adresse einen neuen dictEintrag mit folgenden Feldern hinzufügen:

        <dict>
            <key>CriterionUniqueId</key>
            <string>CC4CB669-0D44-4A32-80B1-02D069718304</string> (*)
            <key>Expression</key>
            <string>spammer@address.spam</string>
            <key>Header</key>
            <string>From</string>
        </dict>

Wie wird die Zeichenfolge bei (*) generiert? Wie kann ich es füllen?

Sie könnten in etwas wie SpamSieve investieren , das alles für Sie erledigt. Keine Zugehörigkeit, ich benutze es nur so lange, dass ich vergesse, dass es da ist;)
Ich freue mich über Ihren Kommentar ☺️ aber SpamSieve kostet 30$ 🤨 Warum kaufen, wenn ich es selbst machen könnte? 🤗

Antworten (1)

Vielleicht werden Sie dieses Skript zu schätzen wissen. Grundsätzlich ruft der Code alle E-Mail-Adressen von den Absendern aller E-Mails ab, die sich in Ihrem Junk-Postfach befinden, und erstellt für jede eine neue E-Mail-Regel ...;. Festlegen des Namens der Regel auf die extrahierte E-Mail-Adresse. Falls es doppelte Elemente in der Absenderliste gibt, werden alle Duplikate entfernt, bevor die Regeln hinzugefügt werden. Außerdem wird ein Dialogfeld angezeigt, in dem Sie die Möglichkeit haben, die neu erstellten Regeln zu aktivieren. Dieser Code sollte sich als enorme Zeitersparnis erweisen.

Dies funktioniert bei mir mit der neuesten Version von macOS High Sierra

set isRunning to application "Mail" is running

tell application "Mail"
    activate
    if isRunning is false then
        delay 12
    else
        delay 2
    end if
    set junkEmailAddressesNoDupes to {}
    set junkEmailAddresses to sender of every message of junk mailbox
    if (count of junkEmailAddresses) is 0 then
        set zeroJunkMail to button returned of (display dialog "You Currently Have 0 Junk Mail Messages" buttons {"OK"} with icon 1 default button "OK" giving up after 10)
        if zeroJunkMail is "OK" then
            if isRunning is false then
                tell application "Mail" to quit
            end if
            return
        end if
        if isRunning is false then
            tell application "Mail" to quit
        end if
        return
    end if
    activate
    display alert ¬
        "IMPORTANT" message "Please Make Sure The Top Level Junk Mail Folder labeled" & " " & quote & "JUNK" & quote & ¬
        " Is Selected" as warning ¬
        buttons {"Cancel", "OK"} ¬
        default button 2 ¬
        cancel button 1 ¬
        giving up after 30
    delay 10
    repeat with i from 1 to count of junkEmailAddresses
        set thisItem to item i of junkEmailAddresses
        set thisEmail to extract address from thisItem
        set end of junkEmailAddressesNoDupes to thisEmail
    end repeat
end tell

set junkEmailAddressesNoDupes2 to removeDuplicates(junkEmailAddressesNoDupes)

tell application "Mail"
    activate
    set checkRulez to button returned of (display dialog ¬
        "Please Make Sure These New Junk Mail Rules Do Not Contain Any Valid Email Addresses That You Don't Want Tagged As Junk" & linefeed & linefeed & (junkEmailAddressesNoDupes2 as list) buttons {"CANCEL", "OK"} ¬
        default button 2 ¬
        cancel button 1 ¬
        with title ¬
        "NEW JUNK MAIL RULES" with icon 1 ¬
        giving up after 120)
end tell

if checkRulez is "CANCEL" then
    return
end if

repeat with i from 1 to count of junkEmailAddressesNoDupes2
    set thisItem to item i of junkEmailAddressesNoDupes2
    tell application "Mail"
        if not (exists of rule thisItem) then
            make new rule ¬
                with properties {name:thisItem}
            tell its rule thisItem
                make new rule condition ¬
                    with properties {header:"", expression:thisItem, rule type:from header, qualifier:equal to value}
                delay 0.1
                set delete message to true
            end tell
        end if
    end tell
end repeat

tell application "Mail"
    activate
    set enableRulez to button returned of (display dialog ¬
        "Enable New Rules?" buttons {"Cancel", "No", "Yes"} ¬
        default button 3 ¬
        cancel button 1 ¬
        with title ¬
        "New Rulez" giving up after 30)
end tell

if enableRulez is "Yes" then
    tell application "Mail" to set enabled of every rule to true
else
    return
end if

tell application "Mail"
    activate
    set applyRulez to button returned of (display dialog ¬
        "Would You Like To Apply Your New Junk Mail Rules To Your Current Junk Mail?" buttons {"No", "Yes"} ¬
        default button 2 ¬
        cancel button 1 ¬
        with title ¬
        "APPLY THE NEW RULES?" with icon 1 ¬
        giving up after 30)
end tell

if applyRulez is "Yes" then
    tell application "System Events"
        tell application "Mail" to activate
        click static text 1 of UI element 1 of row 5 of outline 1 of scroll area 1 ¬
            of splitter group 1 of window 1 of application process "Mail"
        delay 1
        keystroke "a" using command down
        delay 0.5
        keystroke "l" using {option down, command down}
    end tell
else
    return
end if


on removeDuplicates(lst)
    try
        if lst's class is not list then error "not a list." number -1704
        script k
            property l : lst
            property res : {}
        end script
        repeat with itemRef in k's l
            set itm to itemRef's contents
            if k's res does not contain {itm} then ¬
                set k's res's beginning to itm
        end repeat
        return k's res's reverse
    on error eMsg number eNum
        error "Can't removeDuplicates: " & eMsg number eNum
    end try
end removeDuplicates

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Wenn ich das richtig lese, werden alle E-Mail-Adressen aus Junk-Mail abgerufen und alle E-Mails mit diesen E-Mail-Adressen gelöscht. Warum nicht einfach alle E-Mails in Junk-Mail löschen? Mail verschiebt als Junk markierte E-Mails automatisch in den Junk-Mail-Ordner.
@JBis Nein, das liest du nicht richtig. Der Code nimmt alle E-Mail-Adressen der Absender in Ihrem Junk-Postfach und erstellt eine neue Junk-Mail-Regel für jeden der Absender. Der Benutzer muss die neu erstellten Regeln noch aktivieren. Dies ist eine Ausfallsicherung für den Fall, dass einige legitime E-Mails im Junk-Ordner landen. Damit diese Nachrichten gelöscht werden, muss der Benutzer noch die Regeln aktivieren, dann die Junk-E-Mails in der Junkbox auswählen und „Regeln anwenden“
Aber die Regel ist so eingestellt, dass sie gelöscht werden, richtig? Der Sinn des Skripts besteht also darin, dass Sie Junk-Mail basierend auf der E-Mail-Adresse löschen können.
Das ist nur die von mir festgelegte Regelaktion. Sie können den Code gerne anpassen, damit er die von Ihnen gewählte Aktion ausführt
OK. Ich verstehe jetzt die Idee dahinter.
Der eigentliche Sinn des Skripts besteht darin, neue Junk-Mail-Regeln zu erstellen, anstatt sie manuell einzeln erstellen zu müssen