Outlook - Remote Training
Summary: Training script for setting up a spam filtering drone with Outlook.
Requires: SpamSieve, Outlook
Install Location: ~/Library/Application Support/Microsoft/Office/Outlook Script Menu Items/
Last Modified: 2019-10-02
Description
Please see the Setting Up a Spam Filtering Drone section of the manual. You’ll need to enter the names of the IMAP and Exchange accounts that you want the drone to operate on.
Installation Instructions · Download in Compiled Format · Download in Text Format
Script
-- Enter your account names here. If you have more than one, separate with commas: {"Account 1", "Account 2"}
-- The account name comes from the "Account description" field in the Accounts pane of Outlook's preferences.
set _imapAccountNames to {"Account 1"}
set _exchangeAccountNames to {}
tell application "Microsoft Outlook"
repeat with _accountName in _imapAccountNames
set _account to imap account _accountName
my trainMessagesInAccount(_account)
end repeat
repeat with _accountName in _exchangeAccountNames
set _account to exchange account _accountName
my trainMessagesInAccount(_account)
end repeat
end tell
on trainMessagesInAccount(_account)
tell application "Microsoft Outlook"
set _folder to folder "TrainGood" of _account
set _messages to incoming messages of _folder
repeat with _message in _messages
set _source to _message's source
tell application "SpamSieve" to add good message _source
my removeJunkCategories(_message)
move _message to inbox of _account
end repeat
set _folder to folder "TrainSpam" of _account
set _messages to incoming messages of _folder
repeat with _message in _messages
set _source to _message's source
tell application "SpamSieve" to add spam message _source
my applyCategoryNamed(_message, "Junk")
my moveToSpamFolder(_message)
end repeat
end tell
end trainMessagesInAccount
on categoryForName(_categoryName)
tell application "Microsoft Outlook"
try
return category _categoryName
on error
try
-- Getting by name doesn't always work.
repeat with _category in categories
if _category's name is _categoryName then return _category
end repeat
end try
make new category with properties {name:_categoryName}
end try
return category _categoryName
end tell
end categoryForName
on applyCategoryNamed(_message, _categoryName)
tell application "Microsoft Outlook"
set _categoryToApply to my categoryForName(_categoryName)
set _categories to _message's category
repeat with _category in _categories
if _category's id is equal to _categoryToApply's id then return
end repeat
set category of _message to {_categoryToApply} & category of _message
end tell
end applyCategoryNamed
on removeJunkCategories(_message)
tell application "Microsoft Outlook"
try
set _categories to _message's category
set _newCategories to {}
repeat with _category in _categories
if _category's name is not in {"Junk", "Uncertain Junk"} then
copy _category to end of _newCategories
end if
end repeat
set _message's category to _newCategories
end try
end tell
end removeJunkCategories
on moveToSpamFolder(_message)
tell application "Microsoft Outlook"
set _destFolder to my junkFolderForMessage(_message)
move _message to _destFolder
try
if _message's folder is not _destFolder then
move _message to junk mail
end if
end try
end tell
end moveToSpamFolder
on junkFolderForMessage(_message)
tell application "Microsoft Outlook"
try
set _destFolder to junk mail of _message's account
if _destFolder is not missing value then return _destFolder
end try
try
set _destFolder to junk mail
if _destFolder is not missing value then return _destFolder
end try
try
set _destFolder to folder "Junk E-mail" of _message's account
if _destFolder is not missing value then return _destFolder
end try
try
set _destFolder to folder "Junk" of _message's account
if _destFolder is not missing value then return _destFolder
end try
display dialog "Could not find the “Junk E-mail” folder"
return junk mail
end tell
end junkFolderForMessage