Whitelist Rules to Address Book
Summary: Creates address book cards based on whitelist rules.
Requires: SpamSieve, Mac OS X Address Book
Install Location: Scripts menu
Last Modified: 2020-09-21
Description
Run this script with some rules in SpamSieve’s whitelist selected. If any of the selected rules are exact matches for e-mail addresses (e.g. “From (address) Is Equal To” but not “Subject Starts With”), and these addresses are not already present in the address book, it will create new address book cards for them.
This script demonstrates the use of the selection scripting
property. If the whitelist or blocklist window is frontmost,
selection refers to the selected rules. If the corpus
window is frontmost, it refers to the selected token info objects.
Installation Instructions · Download in Compiled Format · Download in Text Format
Script
global gAddresses
set gAddresses to {}
on loadAddressesIfNecessary()
if gAddresses is not {} then return
tell application "Contacts"
repeat with thePerson in people
repeat with theEmail in every email of thePerson
set theAddress to value of theEmail
copy theAddress to end of gAddresses
end repeat
end repeat
return false
end tell
end loadAddressesIfNecessary
on addressBookContainsEmail(theAddress)
my loadAddressesIfNecessary()
ignoring case
return gAddresses contains theAddress
end ignoring
end addressBookContainsEmail
on makeNewAddressBookCard(emailAddress)
tell application "Contacts"
set newEntry to make new person
tell newEntry
make new email at beginning of emails with properties {value:emailAddress}
end tell
end tell
end makeNewAddressBookCard
on ruleHasFullAddress(theRule)
tell application "SpamSieve"
if theRule's match style is not exact style then return false
set theFields to {from field, reply to field, to field, any address, cc field, any recipient}
return theRule's match field is in theFields
end tell
end ruleHasFullAddress
tell application "SpamSieve"
set theRules to selection
repeat with theRule in theRules
if my ruleHasFullAddress(theRule) then
set theAddress to text to match of theRule
if not my addressBookContainsEmail(theAddress) then
my makeNewAddressBookCard(theAddress)
end if
end if
end repeat
end tell
tell application "Contacts"
save
end tell