Mailsmith - Label By Score

Summary: Labels spam messages according to their spamminess.
Requires: SpamSieve, Mailsmith
Install Location: Mailsmith Support/Action Scripts/
Last Modified: 2019-10-02

Description

You can use this script instead of Mailsmith’s built-in support for SpamSieve, if you want additional flexibility. First, uncheck Use SpamSieve in the Spam Handling preferences. Then create a filter that runs this script on every message. Very spammy messages will be colored tan (custom label 20), less spammy ones will be colored brown (custom label 19), and good messages will be left unlabeled.

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

Script

property possibleSpamLabelIndex : 26
property spamLabelIndex : 27
property threshold : 90

on run
    
set theList to getList()
    
if theList is not {} then
        
my doAction(theList)
    
else
        
display dialog "No messages were selected" buttons "OK"
    
end if
end run

on filtermessage(m)
    
my doAction({m})
end filtermessage

on doAction(mList)
    
tell application "Mailsmith"
        
repeat with m in mList
            
try
                
set s to m's RFC822 message
                
tell application "SpamSieve"
                    
set theScore to score message s
                
end tell
                
if theScore ≥ 50 then
                    
set m's is_spam to true
                    
set m's is_not_spam to false
                    
if theScore > threshold then
                        
set label index of m to spamLabelIndex
                    
else
                        
set label index of m to possibleSpamLabelIndex
                    
end if
                
else
                    
set m's is_not_spam to true
                    
set m's is_spam to false
                
end if
            
end try
        
end repeat
    
end tell
end doAction

on getList()
    
tell application "Mailsmith"
        
set retry to false
        
try
            
set mList to get selection as list
            
set m to item 1 of mList
            
if class of m is not message then set retry to true
        
on error
            
set retry to true
        
end try
        
if retry then
            
set retry to false
            
try
                
set mList to message of window 1 as list
            
on error
                
set retry to true
            
end try
        
end if
        
if retry then set mList to {}
    
end tell
    
return mList
end getList