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