Import/Export Rules

Summary: Demonstrates how to import and export SpamSieve’s rules via AppleScript.
Requires: SpamSieve
Install Location: wherever
Last Modified: 2019-10-02

Description

You can copy all your blocklist and whitelist rules to another Mac by following the instructions here.

Running this script will export certain blocklist rules (from address rules with “ends with,” “starts with,” and “regex” styles) to the clipboard. Paste the clipboard into a new script in AppleScript Editor. When you run that script, it will re-create the rules in SpamSieve (without overwriting the existing rules).

Installation Instructions · Download in Compiled Format · Download in Text Format

Script

on run
    
tell application "SpamSieve"
        
set importScript to "tell application \"SpamSieve\"" & return
        
set importScript to importScript & "tell blocklist" & return
        
set importScript to importScript & my makeRules(blocklist, ends with style, "ends with style", from field, "from field")
        
set importScript to importScript & my makeRules(blocklist, starts with style, "starts with style", from field, "from field")
        
set importScript to importScript & my makeRules(blocklist, regex style, "regex style", from field, "from field")
        
set importScript to importScript & "end tell" & return
        
set importScript to importScript & "end tell"
        
set the clipboard to importScript
    
end tell
end run

on makeRules(theList, theStyle, theStyleText, theField, theFieldText)
    
tell application "SpamSieve"
        
tell theList
            
set theResult to ""
            
set theRules to get every rule whose match style is theStyle and match field is theField
            
repeat with r in theRules
                
set theResult to theResult & my makeRule(r's text to match, theStyleText, theFieldText)
            
end repeat
        
end tell
    
end tell
    
return theResult
end makeRules

on makeRule(theText, theStyle, theField)
    
return "make rule with properties {text to match: " & my escape(theText) & ", match field: " & theField & ", match style: " & theStyle & "}" & return
end makeRule

on escape(theText)
    
set bs to "\\"
    
set q to "\""
    
set theText to my replace(theText, bs, bs & bs)
    
set theText to my replace(theText, q, bs & q)
    
return q & theText & q
end escape

on replace(theText, searchText, replaceText)
    
set AppleScript's text item delimiters to searchText
    
set i to text items of theText
    
set AppleScript's text item delimiters to replaceText
    
return i as string
end replace