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


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


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"
end tell