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:
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.
Abschließend sollte das Skript für jede Spammer-Adresse einen neuen dict
Eintrag 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?
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
Tetsujin
kitsune