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: 2010-11-27

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 seletion scripting property. If the whitelist or blocklist window is frontmost, seletion 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