From montanaro at users.sourceforge.net Mon Jun 2 08:40:51 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Mon Jun 2 10:40:55 2003
Subject: [Spambayes-checkins] website faq.txt,1.1,1.2
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv29738
Modified Files:
faq.txt
Log Message:
added a new q&a from Bill Parducci about how long to keep training data.
Index: faq.txt
===================================================================
RCS file: /cvsroot/spambayes/website/faq.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** faq.txt 31 May 2003 01:32:46 -0000 1.1
--- faq.txt 2 Jun 2003 14:40:48 -0000 1.2
***************
*** 432,435 ****
--- 432,452 ----
+ Do I need to keep spam after it has been trained? If so, for how long?
+ ----------------------------------------------------------------------
+
+ Once a message has been [correctly] trained there is no need to keep it
+ around. However, Spambayes' accuracy is dependent upon having a "sufficient"
+ sample from which to make its decisions. Therefore, most users retain a fair
+ amount of spam in the event that they may wish to rebuild the corpus from
+ scratch.
+
+ Of course, this begs the question: "how much is enough?" That is where the
+ "art" of spambayes meets the science. Some users keep as many as several
+ thousand [recent] spam (as well as a similar number of ham). That is not to
+ say that you won't have excellent results with a tenth (or less) of that
+ number; since everyone's e-mail profile is different, the requirements for
+ training are as well.
+
+
Why did Spambayes mark this obvious spam "unsure"?
--------------------------------------------------
From mhammond at users.sourceforge.net Tue Jun 3 07:49:55 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 3 09:49:59 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs
troubleshooting.html, 1.5, 1.6
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv24189
Modified Files:
troubleshooting.html
Log Message:
Document that "Local Settings" is hidden by default on XP/2000.
Index: troubleshooting.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/troubleshooting.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** troubleshooting.html 30 May 2003 03:56:27 -0000 1.5
--- troubleshooting.html 3 Jun 2003 13:49:51 -0000 1.6
***************
*** 97,103 ****
Try resetting the toolbars:
!
Select View->
! Toolbars->
! Customize to display
the toolbar options dialog
Select the tab labelled Toolbars,
--- 97,103 ----
Try resetting the toolbars:
!
Select View-> Toolbars-> Customize to display
the toolbar options dialog
Select the tab labelled Toolbars,
***************
*** 194,207 ****
or \Documents and
Settings\{username}\Local
! Settings\Temp for Windows 2000/XP. The log file for the
most recent execution of Outlook is named spambayes1.log, the second most
recent is named spambayes2.log,
! and so on for the four previous runs.
! You can view this file with notepad. Usually, you will simply see
! messages which indicate that SpamBayes is doing its job. However,
! in some cases there will be errors in this file.
! If SpamBayes fails to perform correctly, please locate the log file and
! report a bug.
Make sure that you are displaying the 'Standard' toolbar - select
! View -> Toolbars, and ensure that "Standard" is selected.
Try resetting the toolbars:
--- 91,97 ----
following:.
!
Make sure that you are displaying the 'SpamBayes' toolbar -
! select
! View -> Toolbars, and ensure that "SpamBayes" is selected.
Try resetting the toolbars:
***************
*** 104,111 ****
select the 'Standard' toolbar,
and click Reset
!
Restart Outlook
!
Messages fail to filter
--- 104,130 ----
select the 'Standard' toolbar,
and click Reset
+
Restart Outlook
!
Try deleting the SpamBayes toolbar
!
!
Select View-> Toolbars-> Customize to display
! the toolbar options dialog
!
Select the tab labelled Toolbars,
! select the 'SpamBayes' toolbar,
! and click Delete
!
Restart Outlook
!
!
!
! If all else fails, you can completely reset the Outlook toolbars by
! removing the file \Documents and
! Settings\{username}\Application Data\Microsoft\Outlook\outcmd.dat.
! Keep a copy of the file in case this does something nasty to your
! system (it didn't to ours, and is documented a few places on the web,
! but we make no guarantees).
!
Messages fail to filter
From mhammond at users.sourceforge.net Tue Jun 3 20:59:06 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 3 22:59:11 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 about.html,1.10,1.11
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv6943
Modified Files:
about.html
Log Message:
Change toolbar text (and Mozilla decided to re-wrap lots!)
Index: about.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/about.html,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** about.html 18 Mar 2003 06:27:00 -0000 1.10
--- about.html 4 Jun 2003 02:59:03 -0000 1.11
***************
*** 7,11 ****
SpamBayes Outlook Plugin
This plugin provides a spam filter based on statistical analysis of
! your personal mail. Unlike other spam detection systems, SpamBayes
actually learns what you consider spam, and continually adapts as both
your regular email and spam patterns change. There are no builtin
--- 7,12 ----
SpamBayes Outlook Plugin
This plugin provides a spam filter based on statistical analysis of
! your personal mail. Unlike other spam detection systems,
! SpamBayes
actually learns what you consider spam, and continually adapts as both
your regular email and spam patterns change. There are no builtin
***************
*** 19,23 ****
Bear in mind that this is an early version, and there are plenty of
! things to improve, particularly related to the initial configuration and
training process. Please bear with us, and see the troubleshooting guide should you
--- 20,25 ----
Bear in mind that this is an early version, and there are plenty of
! things to improve, particularly related to the initial configuration
! and
training process. Please bear with us, and see the troubleshooting guide should you
***************
*** 57,61 ****
style="font-style: italic;">false negative. In this case
you can either drag the message to the Spam folder or click on the Delete as Spam button on the Outlook
toolbar. In both cases, the message will be trained as spam and
will be moved to the spam folder.
--- 59,64 ----
style="font-style: italic;">false negative. In this case
you can either drag the message to the Spam folder or click on the Delete as Spam button on the
! Outlook
toolbar. In both cases, the message will be trained as spam and
will be moved to the spam folder.
***************
*** 65,71 ****
be manually classified; good messages can either be dragged back to the
inbox, or have the Recover from Spam
! toolbar button clicked, while spam messages can either be dragged to the
! Spam folder or have the Delete as Spam
! toobar button clicked. In all cases, the system will automatically
be trained appropriately.
A wanted (ham) message is moved to the Spam folder. This is known
--- 68,77 ----
be manually classified; good messages can either be dragged back to the
inbox, or have the Recover from Spam
! toolbar button clicked, while spam messages can either be dragged to
! the
! Spam folder or have the Delete as
! Spam
! toobar button clicked. In all cases, the system will
! automatically
be trained appropriately.
A wanted (ham) message is moved to the Spam folder. This is known
***************
*** 97,105 ****
Confirm the plugin is installed:
! Start Outlook, and look at the standard Outlook toolbar. On the
! right-hand side, you should see an Anti-Spam dropdown button. If
! this button appears, then the plugin is correctly installed and ready to
! use. If the button does not appear, please see the troubleshooting guide.
Create Spam and Usure folders
--- 103,113 ----
Confirm the plugin is installed:
! Start Outlook, select your Inbox, then look at your Outlook
! toolbar. Just below the standard Toolbar, you should see a new
! toolbar with an Anti-Spam
! dropdown button. If this button appears, then the plugin is
! correctly installed and ready to use. If the button does not
! appear, please see the
! troubleshooting guide.
Create Spam and Usure folders
***************
*** 170,189 ****
While looking at an Outlook table view (like Messages),
right-click on the line with column headers (From, Subject, To,
! Received, ...). In the context menu that pops up, click on Field
! Chooser. A box with title Field Chooser pops up.
In the drop-down list at the top of the Field Chooser window, select User Defined Fields
!
Below the drop-down, you should see a rectangular
! button with a Spam label . This should be automatically created for
all folders managed by the system, but if it does not appear, you will
need to add it yourself. To do this, perform the following steps
!
In the lower left corner of the Field Chooser box,
! click New.... A box with title New Field pops up.
In the Name: box, type Spam.
In the Type: dropdown list, select Percent.
! This is the third choice in the dropdown list. Do not
select any other format -- it won't work.
The Format: select the first entry in the list -
--- 178,199 ----
While looking at an Outlook table view (like Messages),
right-click on the line with column headers (From, Subject, To,
! Received, ...). In the context menu that pops up, click on Field
! Chooser. A box with title Field Chooser pops up.
In the drop-down list at the top of the Field Chooser window, select User Defined Fields
!
Below the drop-down, you should see a rectangular
! button with a Spam label .
! This should be automatically
! created for
all folders managed by the system, but if it does not appear, you will
need to add it yourself. To do this, perform the following steps
!
In the lower left corner of the Field Chooser
! box,
! click New.... A box with title New Field pops up.
In the Name: box, type Spam.
In the Type: dropdown list, select Percent.
! This is the third choice in the dropdown list. Do not
select any other format -- it won't work.
The Format: select the first entry in the list -
***************
*** 191,195 ****
on the right.
!
Click OK in the New Field box. Now you're back in
the Field Chooser box, with a new Spam button shown, as the second
--- 201,205 ----
on the right.
!
Click OK in the New Field box. Now you're back in
the Field Chooser box, with a new Spam button shown, as the second
***************
*** 199,206 ****
Use your mouse to drag the Spam button to the column header
! position where you want to see the Spam column. You don't have to be
precise here -- you can rearrange or resize the column later just by
dragging it around.
!
You're done! Close the Field Chooser box.
--- 209,216 ----
Use your mouse to drag the Spam button to the column header
! position where you want to see the Spam column. You don't have to be
precise here -- you can rearrange or resize the column later just by
dragging it around.
!
You're done! Close the Field Chooser box.
***************
*** 222,228 ****
Outlook's standard Automatic Formatting features can also be taught how
to access the value of this field; for example, you could tell Outlook
! to display rows with suspected spam messages in green italic. However,
for whatever reason, the Outlook Rules Wizard does not allow creating
! rules based on user-defined fields. That's why this addin supplies its
own filtering rules.
Configuring the plugin for filtering
--- 232,238 ----
Outlook's standard Automatic Formatting features can also be taught how
to access the value of this field; for example, you could tell Outlook
! to display rows with suspected spam messages in green italic. However,
for whatever reason, the Outlook Rules Wizard does not allow creating
! rules based on user-defined fields. That's why this addin supplies its
own filtering rules.
Configuring the plugin for filtering
***************
*** 235,242 ****
Once this is done, you simply enable filtering from the main dialog,
and sit back and wait for spam! See using
! the plugin for details further details.
Your help is needed!
This is free software. Please offer any help you are able
! to. In particular, contributions to this documentation are welcome!
--- 245,253 ----
Once this is done, you simply enable filtering from the main dialog,
and sit back and wait for spam! See using
! the plugin for further details.
Your help is needed!
This is free software. Please offer any help you are able
! to. In particular, contributions to this documentation are
! welcome!
From mhammond at users.sourceforge.net Wed Jun 4 02:25:56 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 4 04:26:01 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/dialogs FilterDialog.py,
1.17, 1.18
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/dialogs
In directory sc8-pr-cvs1:/tmp/cvs-serv15145
Modified Files:
FilterDialog.py
Log Message:
No longer default to the "Inbox", as this may mislead people with multiple
inboxes, as seen in [ 741797 ] Does not filter incoming mail.
Index: FilterDialog.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/dialogs/FilterDialog.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** FilterDialog.py 18 Mar 2003 05:31:28 -0000 1.17
--- FilterDialog.py 4 Jun 2003 08:25:53 -0000 1.18
***************
*** 83,91 ****
self.watch_folder_ids = mgr.config.filter.watch_folder_ids
self.watch_include_sub = mgr.config.filter.watch_include_sub
! # If we have no watch folder, suggest the Inbox.
! if len(self.watch_folder_ids)==0 and mgr.outlook is not None:
! inbox = self.mgr.outlook.Session.GetDefaultFolder(constants.olFolderInbox)
! self.watch_folder_ids = [(inbox.StoreID, inbox.EntryID)]
!
self.spam_folder_id = mgr.config.filter.spam_folder_id
self.unsure_folder_id = mgr.config.filter.unsure_folder_id
--- 83,90 ----
self.watch_folder_ids = mgr.config.filter.watch_folder_ids
self.watch_include_sub = mgr.config.filter.watch_include_sub
! # If we have no watch folder, we used to suggest the Inbox.
! # But this mis-lead at least one user, in the case where there are
! # multiple inboxes - he assumed we guess the "correct" one. Forcing
! # the user to specify it means getting the wrong one is their fault.
self.spam_folder_id = mgr.config.filter.spam_folder_id
self.unsure_folder_id = mgr.config.filter.unsure_folder_id
From mhammond at users.sourceforge.net Wed Jun 4 18:50:13 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 4 20:50:17 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 filter.py,1.21,1.22
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv29246
Modified Files:
filter.py
Log Message:
When filtering, saving the spam score is no longer fatal - we log the
error then continue to attempt the filter action.
Index: filter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/filter.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** filter.py 16 May 2003 03:50:56 -0000 1.21
--- filter.py 5 Jun 2003 00:50:10 -0000 1.22
***************
*** 29,41 ****
try:
! # Save the score
! msg.SetField(mgr.config.field_score_name, prob)
! # and the ID of the folder we were in when scored.
! # (but only if we want to perform all actions)
! # Note we must do this, and the Save, before the
! # filter, else the save will fail.
! if all_actions:
! msg.RememberMessageCurrentFolder()
! msg.Save()
if all_actions and attr_prefix is not None:
--- 29,49 ----
try:
! try:
! # Save the score
! # Catch this exception, as failing to save the score need not
! # be fatal - it may still be possible to perform the move.
! msg.SetField(mgr.config.field_score_name, prob)
! # and the ID of the folder we were in when scored.
! # (but only if we want to perform all actions)
! # Note we must do this, and the Save, before the
! # filter, else the save will fail.
! if all_actions:
! msg.RememberMessageCurrentFolder()
! msg.Save()
! except:
! print "Failed to save the Spam score for message ", msg
! import traceback
! traceback.print_exc()
! print "Still (possibly) atempting to move this message though..."
if all_actions and attr_prefix is not None:
From anadelonbrin at users.sourceforge.net Wed Jun 4 22:28:40 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 5 00:28:43 2003
Subject: [Spambayes-checkins] spambayes/contrib muttrc,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/spambayes/contrib
In directory sc8-pr-cvs1:/tmp/cvs-serv20485/contrib
Modified Files:
muttrc
Log Message:
Update to reflect the new (a long time ago!) name for the
classification header, as pointed out by Alister Forbes.
Index: muttrc
===================================================================
RCS file: /cvsroot/spambayes/spambayes/contrib/muttrc,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** muttrc 2 Feb 2003 18:31:44 -0000 1.2
--- muttrc 5 Jun 2003 04:28:37 -0000 1.3
***************
*** 24,26 ****
folder-hook . "macro index H '|hammiefilter.py -g\r !\r'"
folder-hook . "macro pager H '|hammiefilter.py -g\r !\r'"
! color index red black "~h 'X-Hammie-Disposition: spam' ~F"
--- 24,26 ----
folder-hook . "macro index H '|hammiefilter.py -g\r !\r'"
folder-hook . "macro pager H '|hammiefilter.py -g\r !\r'"
! color index red black "~h 'X-Spambayes-Disposition: spam' ~F"
From montanaro at users.sourceforge.net Thu Jun 5 08:19:04 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Thu Jun 5 10:19:11 2003
Subject: [Spambayes-checkins] website faq.txt,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv10274
Modified Files:
faq.txt
Log Message:
Split Outlook plugin questions out from Compatibility section and add
question about marking spam as read automatically.
Index: faq.txt
===================================================================
RCS file: /cvsroot/spambayes/website/faq.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** faq.txt 2 Jun 2003 14:40:48 -0000 1.2
--- faq.txt 5 Jun 2003 14:19:01 -0000 1.3
***************
*** 240,252 ****
- What version of Outlook does it work with?
- ------------------------------------------
-
- The most up to date list of known compatible versions of Outlook may be
- found on the `Windows page`_.
-
- .. _Windows page: http://spambayes.sf.net/windows.html
-
-
Does Spambayes work with Outlook Express?
-----------------------------------------
--- 240,243 ----
***************
*** 269,281 ****
! Do I have to have Python installed to use Spambayes with Outlook?
! -----------------------------------------------------------------
!
! If you use the Outlook plugin binary installer there's no need to explicitly
! install Python.
!
!
! Forget Outlook, what clients will Spambayes work with in general?
! -----------------------------------------------------------------
Spambayes will work with most POP3 or IMAP compatible clients. How you
--- 260,265 ----
! What clients will Spambayes work with in general?
! -------------------------------------------------
Spambayes will work with most POP3 or IMAP compatible clients. How you
***************
*** 324,327 ****
--- 308,331 ----
+ Outlook Plugin
+ ==============
+
+
+ What version(s) of Outlook does the plugin work with?
+ -----------------------------------------------------
+
+ The most up to date list of known compatible versions of Outlook may be
+ found on the `Windows page`_.
+
+ .. _Windows page: http://spambayes.sf.net/windows.html
+
+
+ Do I have to have Python installed to use Spambayes with Outlook?
+ -----------------------------------------------------------------
+
+ If you use the Outlook plugin binary installer there's no need to explicitly
+ install Python.
+
+
Will Spambayes work with Outlook 2000 connecting to an Exchange 2000 server?
----------------------------------------------------------------------------
***************
*** 329,332 ****
--- 333,343 ----
It should, yes. There haven't been any problems reported using that
combination.
+
+
+ Can mail marked as spam automatically be marked as read?
+ --------------------------------------------------------
+
+ This is currently not possible. It's a known problem with an as-yet unknown
+ solution.
From montanaro at users.sourceforge.net Thu Jun 5 09:06:27 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Thu Jun 5 11:06:45 2003
Subject: [Spambayes-checkins] spambayes hammiefilter.py,1.17,1.18
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv13821
Modified Files:
hammiefilter.py
Log Message:
tweak usage message to clarify which flags cause a modified message to be
emitted to stdout and wrapped one long line
Index: hammiefilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/hammiefilter.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** hammiefilter.py 2 May 2003 04:05:12 -0000 1.17
--- hammiefilter.py 5 Jun 2003 15:06:24 -0000 1.18
***************
*** 28,34 ****
-n
create a new database
! * -f
filter (default if no processing options are given)
! * -t
[EXPERIMENTAL] filter and train based on the result (you must
make sure to untrain all mistakes later)
--- 28,34 ----
-n
create a new database
! *+ -f
filter (default if no processing options are given)
! *+ -t
[EXPERIMENTAL] filter and train based on the result (you must
make sure to untrain all mistakes later)
***************
*** 44,51 ****
this message)
! All processing options (marked with *) operate on stdin. If no
! processing options are given, stdin will be scored: the same message,
! with a new header containing the score, will be send to stdout.
!
"""
--- 44,49 ----
this message)
! All options marked with '*' operate on stdin. Only those processing options
! marked with '+' send a modified message to stdout.
"""
***************
*** 148,152 ****
h = HammieFilter()
actions = []
! opts, args = getopt.getopt(sys.argv[1:], 'hxd:D:nfgstGS', ['help', 'examples'])
for opt, arg in opts:
if opt in ('-h', '--help'):
--- 146,151 ----
h = HammieFilter()
actions = []
! opts, args = getopt.getopt(sys.argv[1:], 'hxd:D:nfgstGS',
! ['help', 'examples'])
for opt, arg in opts:
if opt in ('-h', '--help'):
From montanaro at users.sourceforge.net Thu Jun 5 09:13:34 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Thu Jun 5 11:13:38 2003
Subject: [Spambayes-checkins] website/scripts/ht2html Skeleton.py, 1.1.1.1,
1.2
Message-ID:
Update of /cvsroot/spambayes/website/scripts/ht2html
In directory sc8-pr-cvs1:/tmp/cvs-serv18590
Modified Files:
Skeleton.py
Log Message:
make StringIO import technique consistent across all uses
Index: Skeleton.py
===================================================================
RCS file: /cvsroot/spambayes/website/scripts/ht2html/Skeleton.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** Skeleton.py 19 Sep 2002 08:40:55 -0000 1.1.1.1
--- Skeleton.py 5 Jun 2003 15:13:31 -0000 1.2
***************
*** 10,14 ****
import sys
import time
! from cStringIO import StringIO
--- 10,17 ----
import sys
import time
! try:
! from cStringIO import StringIO
! except ImportError:
! from StringIO import StringIO
From montanaro at users.sourceforge.net Thu Jun 5 09:13:57 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Thu Jun 5 11:15:21 2003
Subject: [Spambayes-checkins] website/scripts/ht2html Sidebar.py,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/website/scripts/ht2html
In directory sc8-pr-cvs1:/tmp/cvs-serv18814
Modified Files:
Sidebar.py
Log Message:
make StringIO import technique consistent across all uses
Index: Sidebar.py
===================================================================
RCS file: /cvsroot/spambayes/website/scripts/ht2html/Sidebar.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Sidebar.py 13 Jan 2003 03:57:58 -0000 1.2
--- Sidebar.py 5 Jun 2003 15:13:54 -0000 1.3
***************
*** 4,8 ****
import sys
from types import StringType
! from cStringIO import StringIO
# a useful constant
--- 4,11 ----
import sys
from types import StringType
! try:
! from cStringIO import StringIO
! except ImportError:
! from StringIO import StringIO
# a useful constant
From montanaro at users.sourceforge.net Thu Jun 5 09:14:34 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Thu Jun 5 11:15:37 2003
Subject: [Spambayes-checkins] website/scripts make.rules,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/website/scripts
In directory sc8-pr-cvs1:/tmp/cvs-serv19139
Modified Files:
make.rules
Log Message:
all: target must be first (doh!)
Index: make.rules
===================================================================
RCS file: /cvsroot/spambayes/website/scripts/make.rules,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** make.rules 31 May 2003 01:36:13 -0000 1.2
--- make.rules 5 Jun 2003 15:14:31 -0000 1.3
***************
*** 56,63 ****
$(HT2HTML) $(HTFLAGS) $(HTRELDIR)/$<
- faq.html : faq.txt
- $(DUHTML) faq.txt faq.html
-
all: $(TARGETS)
# $(TARGETS): $(HT2HTML)
--- 56,63 ----
$(HT2HTML) $(HTFLAGS) $(HTRELDIR)/$<
all: $(TARGETS)
+
+ faq.html : faq.txt
+ $(DUHTML) faq.txt faq.html
# $(TARGETS): $(HT2HTML)
From anadelonbrin at users.sourceforge.net Thu Jun 5 16:40:42 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 5 18:40:46 2003
Subject: [Spambayes-checkins] spambayes CHANGELOG.txt, 1.2,
1.3 WHAT_IS_NEW.txt, 1.2, 1.3
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv17846
Modified Files:
CHANGELOG.txt WHAT_IS_NEW.txt
Log Message:
In changelog expand references to sf tracker items so that
both the number and the 'title' are specified.
Bring both the changelog and what's new file up to date.
Index: CHANGELOG.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/CHANGELOG.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** CHANGELOG.txt 26 May 2003 08:39:44 -0000 1.2
--- CHANGELOG.txt 5 Jun 2003 22:40:39 -0000 1.3
***************
*** 4,9 ****
Mark Hammond 03/02/03 If a new bsddb or bsddb3 module is available use this instead of a pickle in the Outlook plugin.
Mark Hammond 03/02/03 Add tick-marks to the filter dialog.
! Mark Hammond 03/02/03 Fix SF#677804.
! Mark Hammond 04/02/03 Fix SF#642740.
Mark Hammond 07/02/03 Fix some errors using bsddb3 in Outlook plugin.
Tim Stone 08/02/03 Ensure that nham and nspam are instances of integer in dbExpImp.py
--- 4,9 ----
Mark Hammond 03/02/03 If a new bsddb or bsddb3 module is available use this instead of a pickle in the Outlook plugin.
Mark Hammond 03/02/03 Add tick-marks to the filter dialog.
! Mark Hammond 03/02/03 Fix SF#677804 ('Untouched fitler command error').
! Mark Hammond 04/02/03 Fix SF#642740 ('"Recover from Spam" wrong folder').
Mark Hammond 07/02/03 Fix some errors using bsddb3 in Outlook plugin.
Tim Stone 08/02/03 Ensure that nham and nspam are instances of integer in dbExpImp.py
***************
*** 13,17 ****
Mark Hammond 12/02/03 Check for correct exception when removing file in Outlook addin.
Mark Hammond 12/02/03 Check for bsddb3 before bsddb (previously bsddb3 would never be found).
! Mark Hammond 13/02/03 SF#685746.
Mark Hammond 13/02/03 Handle exceptions when opening folders in Outlook plugin better.
Skip Montanaro 13/02/03 Split BAYESCUSTOMIZE environment variable using os.pathsep.
--- 13,17 ----
Mark Hammond 12/02/03 Check for correct exception when removing file in Outlook addin.
Mark Hammond 12/02/03 Check for bsddb3 before bsddb (previously bsddb3 would never be found).
! Mark Hammond 13/02/03 Add SF#685746 ('Outlook plugin folder list sorted alphabetically').
Mark Hammond 13/02/03 Handle exceptions when opening folders in Outlook plugin better.
Skip Montanaro 13/02/03 Split BAYESCUSTOMIZE environment variable using os.pathsep.
***************
*** 26,30 ****
Tony Meyer 27/02/03 First check in of smtpproxy.
T. Alexander Popiel 27/02/03 Added various files relating to incremental training (or "self training") regimes.
! Tim Stone 27/02/03 Fix SF#693423.
T. Alexander Popiel 28/02/03 Put all regimes into regmies.py. Define fpfnunsure and fnunsure regimes.
T. Alexander Popiel 28/02/03 Fix name conflict between regimes list and regimes source file in incremental.py
--- 26,30 ----
Tony Meyer 27/02/03 First check in of smtpproxy.
T. Alexander Popiel 27/02/03 Added various files relating to incremental training (or "self training") regimes.
! Tim Stone 27/02/03 Fix SF#693423 ('email message generates error in pop3proxy.py').
T. Alexander Popiel 28/02/03 Put all regimes into regmies.py. Define fpfnunsure and fnunsure regimes.
T. Alexander Popiel 28/02/03 Fix name conflict between regimes list and regimes source file in incremental.py
***************
*** 36,40 ****
Tony Meyer 02/03/03 Added support to smtpproxy for extracting an id in a Mozilla style forwarded message (HTML table).
Mark Hammond 03/03/03 Fix manager.py calling shutil.move (does not exist pre Python 2.3).
! Mark Hammond 03/03/03 Fix SF#696995.
Skip Montanaro 03/03/03 Note when subject charset is invalid (rather than raising an exception).
Mark Hammond 04/03/03 Fix a Outlook plugin bug that could cause incorrect word scores to be used/saved when a bsddb database is used.
--- 36,40 ----
Tony Meyer 02/03/03 Added support to smtpproxy for extracting an id in a Mozilla style forwarded message (HTML table).
Mark Hammond 03/03/03 Fix manager.py calling shutil.move (does not exist pre Python 2.3).
! Mark Hammond 03/03/03 Fix SF#696995 ('Invalid HTML comments are not ignored').
Skip Montanaro 03/03/03 Note when subject charset is invalid (rather than raising an exception).
Mark Hammond 04/03/03 Fix a Outlook plugin bug that could cause incorrect word scores to be used/saved when a bsddb database is used.
***************
*** 45,59 ****
Mark Hammond 04/03/03 Only attempt to create "Spam" field on a mail item in Outlook plugin.
Mark Hammond 04/03/03 If no items are found in Outlook plugin don't attempt to recurse folders.
! Mark Hammond 04/03/03 Fix SF#696476
! Mark Hammond 04/03/03 Fix SF#697120.
Jeremy Hylton 04/03/03 Band-aid decode_header() in pop3proxy.py
! Tim Stone 06/03/03 Added SF#690928.
Skip Montanaro 06/03/03 Catch extra exception in header parse errors.
! Tim Stone 06/03/03 Fix SF#698852.
Mark Hammond 07/03/03 Handle MAPI exceptions better in Outlook plugin.
Mark Hammond 07/03/03 Centralise detection of "not found" exceptions in Outlook plugin.
Mark Hammond 07/03/03 Supress errors in outlook plugin when hotmail connector can't save the message.
T. Alexander Popiel 07/03/03 Added another regime to regimes.py.
! Tim Stone 08/03/03 Fix SF#700165
Tim Peters 08/03/03 List unique tokens one per line in Outlook plugin's ShowClues.
Mark Hammond 09/03/03 Correct "data" directory location in export.py.
--- 45,59 ----
Mark Hammond 04/03/03 Only attempt to create "Spam" field on a mail item in Outlook plugin.
Mark Hammond 04/03/03 If no items are found in Outlook plugin don't attempt to recurse folders.
! Mark Hammond 04/03/03 Fix SF#696476 ('Manual filtering in outlook fails').
! Mark Hammond 04/03/03 Fix SF#697120 ('Manual filtering in Outlook (still) fails').
Jeremy Hylton 04/03/03 Band-aid decode_header() in pop3proxy.py
! Tim Stone 06/03/03 Added SF#690928 ('turn off saving messages in popproxy').
Skip Montanaro 06/03/03 Catch extra exception in header parse errors.
! Tim Stone 06/03/03 Fix SF#698852 ("can't classify messages").
Mark Hammond 07/03/03 Handle MAPI exceptions better in Outlook plugin.
Mark Hammond 07/03/03 Centralise detection of "not found" exceptions in Outlook plugin.
Mark Hammond 07/03/03 Supress errors in outlook plugin when hotmail connector can't save the message.
T. Alexander Popiel 07/03/03 Added another regime to regimes.py.
! Tim Stone 08/03/03 Fix SF#700165 ('MoveFileEx doesn't exist on Win98').
Tim Peters 08/03/03 List unique tokens one per line in Outlook plugin's ShowClues.
Mark Hammond 09/03/03 Correct "data" directory location in export.py.
***************
*** 71,75 ****
Mark Hammond 16/03/03 Fix bug in Outlook plugin where filter operation report was reporting incorrect total.
Mark Hammond 17/03/03 Warn, but ignore errors walking the folder tree in Outlook plugin.
! Tony Meyer 17/03/03 Fix SF#704921.
Mark Hammond 17/03/03 Prevent a single error filtering a message from stopping the whole filter process in Outlook plugin.
Mark Hammond 18/03/03 Ensure all buttons are greyed during filter process in Outlook plugin.
--- 71,75 ----
Mark Hammond 16/03/03 Fix bug in Outlook plugin where filter operation report was reporting incorrect total.
Mark Hammond 17/03/03 Warn, but ignore errors walking the folder tree in Outlook plugin.
! Mark Hammond 17/03/03 Fix SF#704921 ('"Train now" (outlook) fails ').
Mark Hammond 17/03/03 Prevent a single error filtering a message from stopping the whole filter process in Outlook plugin.
Mark Hammond 18/03/03 Ensure all buttons are greyed during filter process in Outlook plugin.
***************
*** 78,83 ****
Mark Hammond 20/03/03 Ensure database is saved before testing outlook plugin.
Mark Hammond 20/03/03 Fix error in testing outlook plugin (getting wrong end of sorted list).
! Tim Stone 20/03/03 Added SF#703283.
! Mark Hammond 23/03/03 Fix SF#707491.
Tim Stone 28/03/03 Unicode print error fix in notesfilter.
Tony Meyer 03/04/03 Expire messages from the unknown pop3proxy cache as well as ham/spam caches.
--- 78,83 ----
Mark Hammond 20/03/03 Ensure database is saved before testing outlook plugin.
Mark Hammond 20/03/03 Fix error in testing outlook plugin (getting wrong end of sorted list).
! Tim Stone 20/03/03 Added SF#703283 ('mboxtrain only trains on cur in maildir').
! Mark Hammond 23/03/03 Fix SF#707491 ('Pop3 proxy service code for Windows doesn't work...').
Tim Stone 28/03/03 Unicode print error fix in notesfilter.
Tony Meyer 03/04/03 Expire messages from the unknown pop3proxy cache as well as ham/spam caches.
***************
*** 145,158 ****
Tim Stone 21/04/03 Cosmetic changes to the web configuration page.
Skip Montanaro 21/04/03 Fix crlf regex in message.py
! Tony Meyer 21/04/03 Fix SF#725307
Tim Stone 21/04/03 Rewrote is_valid method in Options.py
Tony Meyer 22/04/03 Fixed is_valid method for sets.
Tim Stone 22/04/03 Added extra verbose output in IMAP Filter.
Tim Stone 22/04/03 Corrected counting error in IMAP Filter.
! Skip Montanaro 22/04/03 Fix SF#725616
Tony Meyer 22/04/03 Improved processing of fetch response in IMAP filter.
! Tony Meyer 24/04/03 Fix SF#725307
! Tony Meyer 24/04/03 Fix SF#725466
! Tony Meyer 24/04/03 Fix SF#726255
Tony Meyer 24/04/03 Moved the crlf fixing from generic message class to IMAP filter.
Tony Meyer 24/04/03 Major rewrite of Options.py
--- 145,158 ----
Tim Stone 21/04/03 Cosmetic changes to the web configuration page.
Skip Montanaro 21/04/03 Fix crlf regex in message.py
! Tony Meyer 21/04/03 Fix SF#725307 ('Outlook plugin won't load (anymore)').
Tim Stone 21/04/03 Rewrote is_valid method in Options.py
Tony Meyer 22/04/03 Fixed is_valid method for sets.
Tim Stone 22/04/03 Added extra verbose output in IMAP Filter.
Tim Stone 22/04/03 Corrected counting error in IMAP Filter.
! Tony Meyer 22/04/03 Fix SF#725616 ('Options.py mergefiles crashes (+ fix)').
Tony Meyer 22/04/03 Improved processing of fetch response in IMAP filter.
! Tony Meyer 24/04/03 Fix SF#725307 ("Outlook plugin won't load (anymore)").
! Tony Meyer 24/04/03 Fix SF#725466 ('Include a proper locale fix in Options.py').
! Tony Meyer 24/04/03 Fix SF#726255 ('Problem if bayescustomize.ini not there').
Tony Meyer 24/04/03 Moved the crlf fixing from generic message class to IMAP filter.
Tony Meyer 24/04/03 Major rewrite of Options.py
***************
*** 176,180 ****
Tony Meyer 28/04/03 Fix SelectFolder bug in IMAP Filter.
Tim Stone 28/04/03 Create IMAP session object for each login.
! Tony Meyer 28/04/03 Fix for SF#728886.
Tony Meyer 28/04/03 Fix for incorrect is_boolean code in Options.py
Tony Meyer 28/04/03 IMAP Filter now only retrieves RFC822 headers when iterating, not whole message.
--- 176,180 ----
Tony Meyer 28/04/03 Fix SelectFolder bug in IMAP Filter.
Tim Stone 28/04/03 Create IMAP session object for each login.
! Tony Meyer 28/04/03 Fix for SF#728886 ('In the pop3 UI not able to pass more than 1 server').
Tony Meyer 28/04/03 Fix for incorrect is_boolean code in Options.py
Tony Meyer 28/04/03 IMAP Filter now only retrieves RFC822 headers when iterating, not whole message.
***************
*** 194,198 ****
Tony Meyer 03/05/03 Removed OptionConfig.py
Mark Hammond 03/05/03 Correct usage doc with respect to default directory.
! Mark Hammond 03/05/03 Fix SF#715248
Mark Hammond 03/05/03 Formalised error reporting in Outlook plugin.
Mark Hammond 03/05/03 Created special handling for "startup errors" in Outlook plugin
--- 194,198 ----
Tony Meyer 03/05/03 Removed OptionConfig.py
Mark Hammond 03/05/03 Correct usage doc with respect to default directory.
! Mark Hammond 03/05/03 Fix SF#715248 ('Pickle classifier should save to a temp file first').
Mark Hammond 03/05/03 Formalised error reporting in Outlook plugin.
Mark Hammond 03/05/03 Created special handling for "startup errors" in Outlook plugin
***************
*** 205,209 ****
Tony Meyer 06/05/03 IMAP Filter now deletes existing spambayes headers before training.
Tony Meyer 06/05/03 Added "Storage":"messageinfo_storage_file" option.
! Tony Meyer 06/05/03 Fix for SF#733247.
Tony Meyer 11/05/03 Fixed KeyError bug in message.py.
Tony Meyer 11/05/03 Added SSL support to imapfilter (untested).
--- 205,209 ----
Tony Meyer 06/05/03 IMAP Filter now deletes existing spambayes headers before training.
Tony Meyer 06/05/03 Added "Storage":"messageinfo_storage_file" option.
! Tony Meyer 06/05/03 Fix for SF#733247 ('crash when using merged-in options').
Tony Meyer 11/05/03 Fixed KeyError bug in message.py.
Tony Meyer 11/05/03 Added SSL support to imapfilter (untested).
***************
*** 212,221 ****
Tony Meyer 13/05/03 Added "html_ui":"display_to" option.
Mark Hammond 14/05/03 Various changes to urlslurper.py
! Mark Hammond 14/05/03 Fix SF#737956
! Mark Hammond 14/05/03 Fix SF#737955
Tony Meyer 14/05/03 Added missing import to UserInterface.py
Tony Meyer 14/05/03 Increased efforts to stop browsers caching the interface pages.
Mark Hammond 15/05/03 The training dialog now shows a correct progress bar for the *complete* operation - training *and* scoring
! Mark Hammond 15/05/03 Fix SF#706170
Mark Hammond 15/05/03 Save bsddb databases after a training operation (should prevent Outlook ever saving at shutdown).
Mark Hammond 15/05/03 Print how long each save takes (so people can complain).
--- 212,221 ----
Tony Meyer 13/05/03 Added "html_ui":"display_to" option.
Mark Hammond 14/05/03 Various changes to urlslurper.py
! Mark Hammond 14/05/03 Fix SF#737956 ('No hourglass when building folder lists').
! Mark Hammond 14/05/03 Fix SF#737955 ('Transient connection error disables plugin').
Tony Meyer 14/05/03 Added missing import to UserInterface.py
Tony Meyer 14/05/03 Increased efforts to stop browsers caching the interface pages.
Mark Hammond 15/05/03 The training dialog now shows a correct progress bar for the *complete* operation - training *and* scoring
! Mark Hammond 15/05/03 Fix SF#706170 ('Execute test suite fails in Outlook').
Mark Hammond 15/05/03 Save bsddb databases after a training operation (should prevent Outlook ever saving at shutdown).
Mark Hammond 15/05/03 Print how long each save takes (so people can complain).
***************
*** 230,233 ****
Tim Peters 25/05/03 Restore __slots__ declaration to WordInfo object in classifier.py
Tim Peters 25/05/03 PickledClassifier.load(): use getstate/setstate to copy the state.
! Tony Meyer 26/05/03 Fix SF#737986
Tony Meyer 26/05/03 Restore notate_to and notate_subject functionality to pop3proxy.
--- 230,245 ----
Tim Peters 25/05/03 Restore __slots__ declaration to WordInfo object in classifier.py
Tim Peters 25/05/03 PickledClassifier.load(): use getstate/setstate to copy the state.
! Tony Meyer 26/05/03 Fix SF#737986 ('Message.as_string() fails.').
Tony Meyer 26/05/03 Restore notate_to and notate_subject functionality to pop3proxy.
+ Mark Hammond 29/05/03 DB classifier keeps a list of "changed words" to prevent saves from updating *all* words.
+ Mark Hammond 29/05/03 DB classifier doesn't cache hapaxes.
+ Mark Hammond 03/06/03 Handle malformed messages better in the Outlook plugin.
+ Mark Hammond 03/06/03 In Outlook plugin, create our own toolbar, rather than using the standard one.
+ Mark Hammond 03/06/03 Fix an Outlook plugin error that would try to save the database when classifying.
+ Mark Hammond 03/06/03 Make Outlook plugin log refer to "Spambayes" rather than "SpamAddin"
+ Mark Hammond 03/06/03 Use 'wait' cursor when incremental training in Outlook plugin.
+ Mark Hammond 03/06/03 In Outlook plugin, save config when dialog closes and not at shutdown.
+ Mark Hammond 03/06/03 Clean up toolbar images.
+ Mark Hammond 04/06/03 In Outlook plugin, no longer default to the "Inbox" (see also SF#741797 ('Does not filter incoming mail')).
+ Mark Hammond 04/06/03 In Outlook plugin, when filtering, saving the spam score is no longer fatal.
+ Tony Meyer 04/06/03 In muttrc, fix incorrect Spambayes header name.
Index: WHAT_IS_NEW.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/WHAT_IS_NEW.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** WHAT_IS_NEW.txt 26 May 2003 08:39:44 -0000 1.2
--- WHAT_IS_NEW.txt 5 Jun 2003 22:40:40 -0000 1.3
***************
*** 27,30 ****
--- 27,37 ----
o Plugin *may* now work correctly in non-English locales.
o Databases are saved after any training operation.
+ o Handle malformed messages better in the Outlook plugin.
+ o In Outlook plugin, create our own toolbar, rather than using the standard one.
+ o Use 'wait' cursor when incremental training in Outlook plugin.
+ o In Outlook plugin, save config when dialog closes and not at shutdown.
+ o Clean up toolbar images.
+ o In Outlook plugin, no longer default to the "Inbox".
+ o In Outlook plugin, when filtering, saving the spam score is no longer fatal.
POP3 Proxy
***************
*** 90,93 ****
--- 97,103 ----
your septic system becomes "your septic system".
o
and tags are replaced with single blanks.
+ o DB classifier keeps a list of "changed words" to prevent saves from updating *all* words.
+ o DB classifier no longer caches hapaxes.
+ o In muttrc, fix incorrect Spambayes header name.
From anadelonbrin at users.sourceforge.net Thu Jun 5 16:57:44 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 5 18:57:48 2003
Subject: [Spambayes-checkins] spambayes POP3PROXY.txt,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv26255
Modified Files:
POP3PROXY.txt
Log Message:
De-html-ise this text file, plus sundry cleanup.
Index: POP3PROXY.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/POP3PROXY.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** POP3PROXY.txt 27 Mar 2003 04:19:41 -0000 1.2
--- POP3PROXY.txt 5 Jun 2003 22:57:40 -0000 1.3
***************
*** 1,86 ****
!
For MacOS 9
!
before anything
!
Due to MacOS multitasking, the popproxy does not work very fast. On a
! Cube
! or a G4 400, I found it usable but not much. YMMV.
! To handle network connection to localhost it is easier to add a
! host file. If you don't have one already, create one with any text editor.
!
Its name must be "hosts". It should be located in the "Preference" folder.
! Its content should be similar to:
!
! localhost CNAME yourmac.example.com
! yourmac.example.com A 127.0.0.1
!
!
The localhost and 127.0.0.1 values must be exactly like this. If you
! don't
! know the right value to use for yourmac.example.com, put
! anything that looks like this. The end of the first line must be the same as
! the beginning of the second line.
!
When this file is created, go to the "TCP/IP" control panel. Set the user level
! to Administrator. Click on "Use a host file" and select this file. Save
! your changes.
!
On the Mac, you can transform a Python script into a double-clickable
applet. Just drag & drop the pop3proxy.py script onto the BuildApplet
! application. You'll get a double-clickable pop3proxy application.
!
Start pop3proxy and open up a web browser to http://localhost:8880.
! Click on the Configuration link.
Fill in the various fields. For the POP server field, put "localhost".
!
For the videotron account, you are done.
!
For the ulaval account, in the "Advance receive option" windows click on
! the "Ignore the default POP port" check box and type in 6111.
!
!
!
Filtering with Entourage
!
The rule can be:
!
! If
! Specific header: X-Spambayes-Classification Contains ham
! then
! do nothing
! If
! Specific header: X-Spambayes-Classification Contains spam
! then
! Move message to folder Spam
! If
! Specific header: X-Spambayes-Classification Contains unsure
! then
! Move message to folder Unsure
!
!
Configuring Eudora
!
In Eudora, you will be able to reach only one pop server, since you can
configure only one port number for POP. But on this server, you can access
! more than one account.
!
Go to the Tool menu and choose Personalities.
!
Create an new personality with the POP server as "localhost".
!
With the proposed "bayescustomize.ini" you will be able to talk only to
! the videotron server.
!
Filtering with Eudora
!
The rule can be:
!
! Match
! Header: X-Spambayes-Classification contains ham
! Action
! do nothing
! Match
! Header: X-Spambayes-Classification contains spam
! Action
! Transfer To Spam
! Match
! Header: X-Spambayes-Classification contains unsure
! Action
! Transfer To Unsure
!
\ No newline at end of file
--- 1,79 ----
! Additional Information about using the POP3 Proxy.
! ==================================================
!
! For MacOS 9
! -----------
! As a result of the MacOS multitasking, the proxy may not work very fast
! (reports suggest that at least a Cube or G4 400 is necessary; YMMV).
!
! To handle a network connection to 'localhost', it is easiest to add a host
! file. If you don't have one already, create a text file called "hosts" in
! the "Preferences" folder. The content of the file should be:
! localhost CNAME yourmac.example.com
! yourmac.example.com A 127.0.0.1
! The localhost and 127.0.0.1 values must be exactly like this. If you don't
! know the right value to use for "yourmac.example.com", put anything that
! looks like this. The end of the first line must be the same as the start of
! the second line.
! When this file is created, go to the "TCP/IP" control panl. Set the user
! level to 'Administrator'. Click on "Use a host file" and select this file.
! Save your changes.
!
! On the Mac, you can transform a Python script into a double-clickable
applet. Just drag & drop the pop3proxy.py script onto the BuildApplet
! application. You'll get a double-clickable pop3proxy application.
! To setup:
! 1. Start pop3proxy and open up a web browser to http://localhost:8880.
! 2. Click on the Configuration link.
! 3. Ensure that the servers line looks like:
! pop3proxy_servers: pop.example.com:110,mail.example.com:110
! 4. And that the ports line looks like:
! pop3proxy_ports: 110, 111
!
! To configure Entourage:
! 1. Go to the 'Tools' menu and choose 'Accounts'.
! 2. Click on 'New' and choose 'POP'.
! 3. Fill in the various fields. For the POP server field, put "localhost".
! 4. For the pop.example.com account, you are done.
! 5. For the mail.example.com account, in the "Advance receive option"
! window click on the "Ignore the default POP port" check box and type
! in 111.
!
! To filter with Entourage:
! The rule can be:
! If
! Specific header: X-Spambayes-Classification Contains ham
! then
! do nothing
! If
! Specific header: X-Spambayes-Classification Contains spam
! then
! Move message to folder Spam
! If
! Specific header: X-Spambayes-Classification Contains unsure
! then
! Move message to folder Unsure
!
! To configure Eudora:
! In Eudora, you will be able to reach only one pop server, since you can
configure only one port number for POP. But on this server, you can access
! more than one account.
! 1. Go to the 'Tools' menu and choose 'Personalities'.
! 2. Create a new personality with the POP server as "localhost".
! Note: You will be able to talk only to the pop.example.com server.
!
! To filter with Eudora:
! The rule can be:
! Match
! Header: X-Spambayes-Classification contains ham
! Action
! do nothing
! Match
! Header: X-Spambayes-Classification contains spam
! Action
! Transfer To Spam
! Match
! Header: X-Spambayes-Classification contains unsure
! Action
! Transfer To Unsure
From anadelonbrin at users.sourceforge.net Thu Jun 5 17:02:31 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 5 19:02:33 2003
Subject: [Spambayes-checkins] spambayes FAQ.txt,1.5,NONE
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv30018
Removed Files:
FAQ.txt
Log Message:
The up-to-date FAQ is in the 'website' repository, and it doesn't seem to
make much sense to have multiple copies.
(However, some sort of packaged documentation, including the FAQ,
would be good to include with releases...some of this is in the main
repository, some is in the website one)
--- FAQ.txt DELETED ---
From mhammond at users.sourceforge.net Thu Jun 5 21:57:21 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Thu Jun 5 23:57:26 2003
Subject: [Spambayes-checkins] spambayes/spambayes Version.py,NONE,1.1
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv4228
Added Files:
Version.py
Log Message:
First pass at a version information repository.
--- NEW FILE: Version.py ---
"""Simple version repository for SpamBayes core, and our main apps"""
# This module is part of the spambayes project, which is Copyright 2002-3
# The Python Software Foundation and is covered by the Python Software
# Foundation license.
versions = {
# Non app specific - changed when "spambayes\*" changes significantly
"Version": 0.1,
"Description": "SpamBayes Beta1",
"Date": "June 2003",
"Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
# Sub-dict for application specific version strings.
"Apps": {
"Outlook" : {
"Version": 0.3,
"BinaryVersion": 003,
"Description": "SpamBayes Outlook Addin Beta1",
"Date": "June 2003",
"Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
"Full Description Binary":
"%(Description)s, Binary version %(BinaryVersion)s (%(Date)s)",
},
},
}
def get_version_string(app = None, description_key = "Full Description"):
"""Get a pretty version string, generally just to log or show in a UI"""
if app is None:
dict = versions
else:
dict = versions["Apps"][app]
return dict[description_key] % dict
def get_version_number(app = None, version_key = "Version"):
"""Get a version number, as a float. This would primarily be used so some
app or extension can determine if we are later than a specific version
of either the engine or a specific app.
Maybe YAGNI.
"""
if app is None:
dict = versions
else:
dict = versions["Apps"][app]
return dict[version_key]
if __name__=='__main__':
print "SpamBayes version is:", get_version_string()
# Enumerate applications
print
print "Application versions:"
for app in versions["Apps"]:
print "%s: %s" % (app, get_version_string(app))
From mhammond at users.sourceforge.net Thu Jun 5 22:01:54 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Fri Jun 6 00:02:00 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.58,1.59
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv5795
Modified Files:
addin.py
Log Message:
Change the "description" and "friendly name" of the addin. Print our
new version info at startup.
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.58
retrieving revision 1.59
diff -C2 -d -r1.58 -r1.59
*** addin.py 4 Jun 2003 02:45:14 -0000 1.58
--- addin.py 6 Jun 2003 04:01:51 -0000 1.59
***************
*** 705,709 ****
# automatically disabled by Outlook.
# Our error reporter is in the "manager" module, so we get that first
- print "SpamBayes - Connecting to Outlook"
import manager
try:
--- 705,708 ----
***************
*** 715,718 ****
--- 714,723 ----
self.manager.addin = self
+ # Only now will the import of "spambayes.Version" work, as the
+ # manager is what munges sys.path for us.
+ from spambayes.Version import get_version_string
+ print "%s starting (with engine %s)..." % \
+ (get_version_string("Outlook"), get_version_string())
+
explorers = application.Explorers
# and Explorers events so we know when new explorers spring into life.
***************
*** 801,805 ****
new_hooks[msgstore_folder.id] = new_hook
self.manager.EnsureOutlookFieldsForFolder(msgstore_folder.GetID())
! print "AntiSpam: Watching for new messages in folder ", name
else:
new_hooks[msgstore_folder.id] = existing
--- 806,810 ----
new_hooks[msgstore_folder.id] = new_hook
self.manager.EnsureOutlookFieldsForFolder(msgstore_folder.GetID())
! print "SpamBayes: Watching for new messages in folder ", name
else:
new_hooks[msgstore_folder.id] = existing
***************
*** 847,852 ****
_winreg.SetValueEx(subkey, "CommandLineSafe", 0, _winreg.REG_DWORD, 0)
_winreg.SetValueEx(subkey, "LoadBehavior", 0, _winreg.REG_DWORD, 3)
! _winreg.SetValueEx(subkey, "Description", 0, _winreg.REG_SZ, klass._reg_progid_)
! _winreg.SetValueEx(subkey, "FriendlyName", 0, _winreg.REG_SZ, klass._reg_progid_)
def UnregisterAddin(klass):
--- 852,857 ----
_winreg.SetValueEx(subkey, "CommandLineSafe", 0, _winreg.REG_DWORD, 0)
_winreg.SetValueEx(subkey, "LoadBehavior", 0, _winreg.REG_DWORD, 3)
! _winreg.SetValueEx(subkey, "Description", 0, _winreg.REG_SZ, "SpamBayes anti-spam tool")
! _winreg.SetValueEx(subkey, "FriendlyName", 0, _winreg.REG_SZ, "SpamBayes")
def UnregisterAddin(klass):
From mhammond at users.sourceforge.net Thu Jun 5 22:02:29 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Fri Jun 6 00:02:32 2003
Subject: [Spambayes-checkins]
spambayes/Outlook2000/dialogs ManagerDialog.py, 1.9, 1.10
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/dialogs
In directory sc8-pr-cvs1:/tmp/cvs-serv6054
Modified Files:
ManagerDialog.py
Log Message:
Add the version to the main Manager dialog (and change the title to
"SpamBayes"
Index: ManagerDialog.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/dialogs/ManagerDialog.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** ManagerDialog.py 27 Nov 2002 05:49:56 -0000 1.9
--- ManagerDialog.py 6 Jun 2003 04:02:26 -0000 1.10
***************
*** 28,31 ****
--- 28,32 ----
IDC_TRAINING_STATUS = 1032
IDC_FILTER_STATUS = 1033
+ IDC_VERSION = 1034
class ManagerDialog(dialog.Dialog):
***************
*** 38,69 ****
dt = [
# Dialog itself.
! ["Anti-Spam", (0, 0, 242, 191), style, None, (8, "MS Sans Serif")],
# Training
! [BUTTON, "Training", -1, (8,7,227,103), cs | win32con.BS_GROUPBOX],
! [STATIC, training_intro, -1, (15,17,215,17), cs],
[STATIC, "Automatically train that a message is good when",
! -1, (15,40,208,10), cs],
[BUTTON, "It is moved from a spam folder back to the Inbox",
! IDC_BUT_TRAIN_FROM_SPAM_FOLDER,(20,50,204,9), csts | win32con.BS_AUTOCHECKBOX],
[STATIC, "Automatically train that a message is spam when",
! -1, (15,64,208,10), cs],
[BUTTON, "It is moved to the certain-spam folder",
! IDC_BUT_TRAIN_TO_SPAM_FOLDER,(20,75,204,9), csts | win32con.BS_AUTOCHECKBOX],
! [STATIC, "", IDC_TRAINING_STATUS, (15,88,146,14), cs | win32con.SS_LEFTNOWORDWRAP | win32con.SS_CENTERIMAGE | win32con.SS_SUNKEN],
! [BUTTON, 'Train Now...', IDC_BUT_TRAIN_NOW, (167,88,63,14), csts | win32con.BS_PUSHBUTTON],
# Filter
! [BUTTON, "Filtering", -1, (7,112,228,57), cs | win32con.BS_GROUPBOX],
! [STATIC, filtering_intro, -1, (15,121,202,8), cs],
! [BUTTON, 'Enable &filtering', IDC_BUT_FILTER_ENABLE,(20,133,120,11),csts | win32con.BS_AUTOCHECKBOX],
! [STATIC, "", IDC_FILTER_STATUS, (15,147,146,18),cs | win32con.SS_SUNKEN],
! [BUTTON, 'Filter Now...', IDC_BUT_FILTER_NOW, (167,131,63,14), csts | win32con.BS_PUSHBUTTON],
! [BUTTON, 'Define filters...', IDC_BUT_FILTER_DEFINE,(167,150,63,14),csts | win32con.BS_PUSHBUTTON],
! [BUTTON, 'Advanced...', IDC_BUT_ADVANCED, (15,174,62,14), csts | win32con.BS_PUSHBUTTON | win32con.WS_DISABLED],
! [BUTTON, 'About...', IDC_BUT_ABOUT, (99,174,62,14), csts | win32con.BS_PUSHBUTTON],
! [BUTTON, 'Close', win32con.IDOK, (167,174,62,14),csts | win32con.BS_DEFPUSHBUTTON],
]
--- 39,71 ----
dt = [
# Dialog itself.
! ["SpamBayes", (0, 0, 242, 201), style, None, (8, "MS Sans Serif")],
! [STATIC, "", IDC_VERSION, (8,4,230,11), cs | win32con.SS_LEFTNOWORDWRAP],
# Training
! [BUTTON, "Training", -1, (8,17,227,103), cs | win32con.BS_GROUPBOX],
! [STATIC, training_intro, -1, (15,27,215,17), cs],
[STATIC, "Automatically train that a message is good when",
! -1, (15,50,208,10), cs],
[BUTTON, "It is moved from a spam folder back to the Inbox",
! IDC_BUT_TRAIN_FROM_SPAM_FOLDER,(20,60,204,9), csts | win32con.BS_AUTOCHECKBOX],
[STATIC, "Automatically train that a message is spam when",
! -1, (15,74,208,10), cs],
[BUTTON, "It is moved to the certain-spam folder",
! IDC_BUT_TRAIN_TO_SPAM_FOLDER,(20,85,204,9), csts | win32con.BS_AUTOCHECKBOX],
! [STATIC, "", IDC_TRAINING_STATUS, (15,98,146,14), cs | win32con.SS_LEFTNOWORDWRAP | win32con.SS_CENTERIMAGE | win32con.SS_SUNKEN],
! [BUTTON, 'Train Now...', IDC_BUT_TRAIN_NOW, (167,98,63,14), csts | win32con.BS_PUSHBUTTON],
# Filter
! [BUTTON, "Filtering", -1, (7,122,228,57), cs | win32con.BS_GROUPBOX],
! [STATIC, filtering_intro, -1, (15,131,202,8), cs],
! [BUTTON, 'Enable &filtering', IDC_BUT_FILTER_ENABLE,(20,143,120,11),csts | win32con.BS_AUTOCHECKBOX],
! [STATIC, "", IDC_FILTER_STATUS, (15,157,146,18),cs | win32con.SS_SUNKEN],
! [BUTTON, 'Filter Now...', IDC_BUT_FILTER_NOW, (167,141,63,14), csts | win32con.BS_PUSHBUTTON],
! [BUTTON, 'Define filters...', IDC_BUT_FILTER_DEFINE,(167,160,63,14),csts | win32con.BS_PUSHBUTTON],
! #[BUTTON, 'Advanced...', IDC_BUT_ADVANCED, (15,184,62,14), csts | win32con.BS_PUSHBUTTON | win32con.WS_DISABLED ],
! [BUTTON, 'About...', IDC_BUT_ABOUT, (99,184,62,14), csts | win32con.BS_PUSHBUTTON],
! [BUTTON, 'Close', win32con.IDOK, (167,184,62,14),csts | win32con.BS_DEFPUSHBUTTON],
]
***************
*** 85,88 ****
--- 87,96 ----
def OnInitDialog(self):
+ from spambayes.Version import get_version_string
+ version_key = "Full Description"
+ if hasattr(sys, "frozen"):
+ version_key += " Binary"
+ self.SetDlgItemText(IDC_VERSION, get_version_string("Outlook", version_key))
+
## self.HookCommand(self.OnButAdvanced, IDC_BUT_ADVANCED)
self.HookCommand(self.OnButAbout, IDC_BUT_ABOUT)
From npickett at users.sourceforge.net Fri Jun 6 11:08:15 2003
From: npickett at users.sourceforge.net (Neale Pickett)
Date: Fri Jun 6 13:08:22 2003
Subject: [Spambayes-checkins] spambayes INTEGRATION.txt,1.8,1.9
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv32241
Modified Files:
INTEGRATION.txt
Log Message:
Integrated Prabhu Ramachandran's code for the VM mailer
Index: INTEGRATION.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/INTEGRATION.txt,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** INTEGRATION.txt 17 Apr 2003 00:41:30 -0000 1.8
--- INTEGRATION.txt 6 Jun 2003 17:08:12 -0000 1.9
***************
*** 333,363 ****
! X/Emacs+VM
! ----------
!
! Emacs and XEmacs both come with VM, one of a choice of several Emacs-based
! mail packages. Emacs is extensible using Emacs Lisp or Pymacs. This
! extensibility allows you to easily segregate your incoming mail for training
! purposes. Here's one such example. If you place the following code in your
! ~/.vm file:
!
! (defun copy-to-spam ()
! (interactive)
! (vm-save-message (expand-file-name "~/tmp/newspam"))
! (vm-undelete-message 1))
!
! (defun copy-to-nonspam ()
! (interactive)
! (vm-save-message (expand-file-name "~/tmp/newham"))
! (vm-undelete-message 1))
! (define-key vm-mode-map "ls" 'copy-to-spam)
! (define-key vm-summary-mode-map "ls" 'copy-to-spam)
! (define-key vm-mode-map "lh" 'copy-to-nonspam)
! (define-key vm-summary-mode-map "lh" 'copy-to-nonspam)
- 'ls' will save a copy of the current message to ~/tmp/newspam and 'lh' will
- save a copy of the current message to ~/tmp/newham. You can then use those
- files later as arguments to hammie.py for training.
--- 333,343 ----
! VM and Gnus
! -----------
! VM and Gnus are mail readers distributed with Emacs and XEmacs. The
! spambayes.el file in the contrib directory contains code and
! instructions for VM and Gnus integration.
From npickett at users.sourceforge.net Fri Jun 6 11:08:15 2003
From: npickett at users.sourceforge.net (Neale Pickett)
Date: Fri Jun 6 13:08:23 2003
Subject: [Spambayes-checkins] spambayes/contrib spambayes.el,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/spambayes/contrib
In directory sc8-pr-cvs1:/tmp/cvs-serv32241/contrib
Modified Files:
spambayes.el
Log Message:
Integrated Prabhu Ramachandran's code for the VM mailer
Index: spambayes.el
===================================================================
RCS file: /cvsroot/spambayes/spambayes/contrib/spambayes.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** spambayes.el 27 Jan 2003 21:12:47 -0000 1.2
--- spambayes.el 6 Jun 2003 17:08:13 -0000 1.3
***************
*** 1,5 ****
! ;; spambayes.el -- integrate spambayes into Gnus
;; Copyright (C) 2003 Neale Pickett
! ;; Time-stamp: <2003-01-27 13:12:14 neale>
;; This is free software; you can redistribute it and/or modify it under
--- 1,5 ----
! ;; spambayes.el -- integrate spambayes into Gnus and VM
;; Copyright (C) 2003 Neale Pickett
! ;; Time-stamp: <2003-06-06 10:07:09 neale>
;; This is free software; you can redistribute it and/or modify it under
***************
*** 38,41 ****
--- 38,44 ----
;; Installation:
;;
+ ;;
+ ;; GNUS
+ ;; ----
;; To install, just drop this file in your load path, and insert the
;; following lines in ~/.gnus:
***************
*** 45,51 ****
;; 'gnus-sum-load-hook
;; (lambda nil
! ;; (define-key gnus-summary-mode-map [(B) (s)] 'spambayes-refile-as-spam)
! ;; (define-key gnus-summary-mode-map [(B) (h)] 'spambayes-refile-as-ham)))
;;
(defvar spambayes-spam-group "spam"
--- 48,85 ----
;; 'gnus-sum-load-hook
;; (lambda nil
! ;; (define-key gnus-summary-mode-map [(B) (s)] 'spambayes-gnus-refile-as-spam)
! ;; (define-key gnus-summary-mode-map [(B) (h)] 'spambayes-gnus-refile-as-ham)))
! ;;
! ;;
! ;; VM (Courtesy of Prabhu Ramachandran )
! ;; ----
! ;; Put the following in ~/.vm:
! ;;
! ;; (load-library "spambayes")
;;
+ ;; This binds "l h" to retrain processable messages as ham and "l s"
+ ;; to retrain them as spam.
+ ;; (define-key vm-mode-map "ls" 'spambayes-vm-retrain-as-spam)
+ ;; (define-key vm-summary-mode-map "ls" 'spambayes-vm-retrain-as-spam)
+ ;; (define-key vm-mode-map "lh" 'spambayes-vm-retrain-as-ham)
+ ;; (define-key vm-summary-mode-map "lh" 'spambayes-vm-retrain-as-ham)
+ ;;
+ ;; (setq vm-auto-folder-alist
+ ;; '(("X-Spambayes-Classification:" ("spam" . "~/vmmail/SPAM"))
+ ;; ("X-Spambayes-Classification:" ("unsure" . "~/vmmail/UNSURE"))
+ ;; )
+ ;; )
+ ;;
+ ;; Hitting the 'A' key will refile messages to the SPAM and UNSURE folders.
+ ;;
+ ;; The following visible header list might also be useful:
+ ;; (setq vm-visible-headers
+ ;; '("Resent-"
+ ;; "From:" "Sender:" "Reply-To:"
+ ;; "To:" "Apparently-To:" "Cc:"
+ ;; "Subject:"
+ ;; "Date:"
+ ;; "X-Spambayes-Classification:"))
+
(defvar spambayes-spam-group "spam"
***************
*** 55,59 ****
"Path to the hammiefilter program")
! (defun spambayes-retrain (is-spam)
"Retrain on all processable articles, or the one under the cursor.
--- 89,95 ----
"Path to the hammiefilter program")
! ;; Gnus
!
! (defun spambayes-gnus-retrain (is-spam)
"Retrain on all processable articles, or the one under the cursor.
***************
*** 89,93 ****
(do-exec n group is-spam))))))
! (defun spambayes-refile-as-spam ()
"Retrain and refilter all process-marked messages as spam, then respool them"
(interactive)
--- 125,129 ----
(do-exec n group is-spam))))))
! (defun spambayes-gnus-refile-as-spam ()
"Retrain and refilter all process-marked messages as spam, then respool them"
(interactive)
***************
*** 95,99 ****
(gnus-summary-respool-article nil (gnus-group-method gnus-newsgroup-name)))
! (defun spambayes-refile-as-ham ()
"Retrain and refilter all process-marked messages as ham, then respool them"
(interactive)
--- 131,135 ----
(gnus-summary-respool-article nil (gnus-group-method gnus-newsgroup-name)))
! (defun spambayes-gnus-refile-as-ham ()
"Retrain and refilter all process-marked messages as ham, then respool them"
(interactive)
***************
*** 101,102 ****
--- 137,166 ----
(gnus-summary-respool-article nil (gnus-group-method gnus-newsgroup-name)))
+
+ ;;; VM
+
+ (defun spambayes-vm-retrain (is-spam)
+ "Retrain on all processable articles, or the one under the cursor.
+
+ is-spam is a boolean--true if you want to retrain the message as spam,
+ false if you want to retrain as ham.
+ "
+ (interactive)
+ (message (concat "Retraining" (if is-spam " as SPAM" " as HAM") " ..."))
+ (vm-pipe-message-to-command
+ (concat spambayes-hammiefilter (if is-spam " -s" " -g") " -f") nil)
+ (message (concat "Done retraining messages"
+ (if is-spam " as SPAM" " as HAM") ".") )
+ )
+
+ (defun spambayes-vm-retrain-as-spam ()
+ "Retrain and refilter messages as spam"
+ (interactive)
+ (spambayes-vm-retrain 't)
+ )
+
+ (defun spambayes-vm-retrain-as-ham ()
+ "Retrain and refilter messages as ham"
+ (interactive)
+ (spambayes-vm-retrain nil)
+ )
From grandis at toweroncology.com Fri Jun 6 12:13:27 2003
From: grandis at toweroncology.com (Greg Randis)
Date: Fri Jun 6 14:14:01 2003
Subject: [Spambayes-checkins] Unable to register dll!
Message-ID: <33EE270315D7D511B91600065B0536498FD469@thont01.toweroncology.com>
Hi All-
I am getting -
C:\Program Files\Spambayes Outlook Addin\spambayes_addin.dll
Unable to register the DLL/OCX: DllRegisterServer failed; code
0x00000000.
Click Retry to try again, Ignore to proceed anyway (not
recommended), or Abort to cancel installation.
Yes, I am/have administrator access to this system. This the binary version
for windows Outlook 2000.
Gregory A. Randis
Director, Information Technology
grandis@toweroncology.com
(310) 289-2840 Office
(310) 678-9397 Cell
(310) 289-2852 Fax
This communication (and/or any accompanying attachments) may contain
confidential healthcare information belonging to the sender which is
protected by physician-patient privilege or rights of staff committee
confidentiality as provided for by state and federal law. Nothing contained
in this communication and any attachments thereto is intended to waive any
privileges or rights of confidentiality. The information is intended only
for the use of the individuals or entity to which it is addressed. If you
are not the intended recipient, you are hereby notified that any disclosure,
copying, distribution, or the taking of any action in reliance on the
contents of this transmission is strictly prohibited by law. If you have
received this transmission in error, please immediately notify the sender by
telephone, destroy any electronic copies, and arrange to return any hard
copies to the sender.
Tower Hematology Oncology Medical Group
8635 W. Third Street, Suite 665 West
Los Angeles, CA 90048
(310) 289-2840
From anadelonbrin at users.sourceforge.net Sun Jun 8 16:40:23 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Sun Jun 8 18:40:27 2003
Subject: [Spambayes-checkins] spambayes/spambayes Version.py,1.1,1.2
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv29600/spambayes
Modified Files:
Version.py
Log Message:
Change 'core' date to May (when last major changes were seen).
Add version information for hammie, pop3proxy, smtpproxy,
imapfilter.
Index: Version.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/Version.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Version.py 6 Jun 2003 03:57:18 -0000 1.1
--- Version.py 8 Jun 2003 22:40:21 -0000 1.2
***************
*** 8,15 ****
"Version": 0.1,
"Description": "SpamBayes Beta1",
! "Date": "June 2003",
"Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
# Sub-dict for application specific version strings.
"Apps": {
"Outlook" : {
"Version": 0.3,
--- 8,21 ----
"Version": 0.1,
"Description": "SpamBayes Beta1",
! "Date": "May 2003",
"Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
# Sub-dict for application specific version strings.
"Apps": {
+ "Hammie" : {
+ "Version": 0.1,
+ "Description": "SpamBayes command line tool (Hammie) Beta1",
+ "Date": "January 2003",
+ "Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
+ },
"Outlook" : {
"Version": 0.3,
***************
*** 20,23 ****
--- 26,59 ----
"Full Description Binary":
"%(Description)s, Binary version %(BinaryVersion)s (%(Date)s)",
+ },
+ "POP3 Proxy" : {
+ "Version": 0.1,
+ "Description": "SpamBayes POP3 Proxy Beta1",
+ "Date": "May 2003",
+ "InterfaceVersion": 0.02,
+ "InterfaceDescription": "SpamBayes POP3 Proxy Web Interface Alpha2",
+ "Full Description": """%(Description)s, version %(Version)s (%(Date)s),
+ using %(InterfaceDescription)s, version %(InterfaceVersion)s""",
+ },
+ "Lotus Notes Filter" : {
+ "Version": 0.01,
+ "Description": "SpamBayes Lotus Notes Filter Alpha1",
+ "Date": "March 2003",
+ "Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
+ },
+ "SMTP Proxy" : {
+ "Version": 0.01,
+ "Description": "SpamBayes SMTP Proxy Alpha1",
+ "Date": "May 2003",
+ "Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
+ },
+ "IMAP Filter" : {
+ "Version": 0.01,
+ "Description": "SpamBayes IMAP Filter Alpha1",
+ "Date": "May 2003",
+ "InterfaceVersion": 0.01,
+ "InterfaceDescription": "SpamBayes IMAP Filter Web Interface Alpha1",
+ "Full Description": """%(Description)s, version %(Version)s (%(Date)s),
+ using %(InterfaceDescription)s, version %(InterfaceVersion)s""",
},
},
From montanaro at users.sourceforge.net Tue Jun 10 08:03:30 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Tue Jun 10 10:15:51 2003
Subject: [Spambayes-checkins] spambayes/contrib spambayes.el,1.3,1.4
Message-ID:
Update of /cvsroot/spambayes/spambayes/contrib
In directory sc8-pr-cvs1:/tmp/cvs-serv17828
Modified Files:
spambayes.el
Log Message:
maybe 't is equivalent to t but I wouldn't count on it in all situations
Index: spambayes.el
===================================================================
RCS file: /cvsroot/spambayes/spambayes/contrib/spambayes.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** spambayes.el 6 Jun 2003 17:08:13 -0000 1.3
--- spambayes.el 10 Jun 2003 14:03:26 -0000 1.4
***************
*** 157,161 ****
"Retrain and refilter messages as spam"
(interactive)
! (spambayes-vm-retrain 't)
)
--- 157,161 ----
"Retrain and refilter messages as spam"
(interactive)
! (spambayes-vm-retrain t)
)
From anadelonbrin at users.sourceforge.net Thu Jun 12 01:19:16 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 12 03:19:19 2003
Subject: [Spambayes-checkins] spambayes/spambayes Version.py,1.2,1.3
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv15721/spambayes
Modified Files:
Version.py
Log Message:
Bring changelog/what's new up to date.
Add a suggestion to read the FAQ to the readme.
Index: Version.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/Version.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Version.py 8 Jun 2003 22:40:21 -0000 1.2
--- Version.py 12 Jun 2003 07:19:14 -0000 1.3
***************
*** 34,38 ****
"InterfaceDescription": "SpamBayes POP3 Proxy Web Interface Alpha2",
"Full Description": """%(Description)s, version %(Version)s (%(Date)s),
! using %(InterfaceDescription)s, version %(InterfaceVersion)s""",
},
"Lotus Notes Filter" : {
--- 34,38 ----
"InterfaceDescription": "SpamBayes POP3 Proxy Web Interface Alpha2",
"Full Description": """%(Description)s, version %(Version)s (%(Date)s),
! using %(InterfaceDescription)s, version %(InterfaceVersion)s""",
},
"Lotus Notes Filter" : {
***************
*** 55,59 ****
"InterfaceDescription": "SpamBayes IMAP Filter Web Interface Alpha1",
"Full Description": """%(Description)s, version %(Version)s (%(Date)s),
! using %(InterfaceDescription)s, version %(InterfaceVersion)s""",
},
},
--- 55,59 ----
"InterfaceDescription": "SpamBayes IMAP Filter Web Interface Alpha1",
"Full Description": """%(Description)s, version %(Version)s (%(Date)s),
! using %(InterfaceDescription)s, version %(InterfaceVersion)s""",
},
},
From anadelonbrin at users.sourceforge.net Thu Jun 12 01:19:16 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 12 03:19:20 2003
Subject: [Spambayes-checkins] spambayes CHANGELOG.txt, 1.3, 1.4 README.txt,
1.48, 1.49 WHAT_IS_NEW.txt, 1.3, 1.4
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv15721
Modified Files:
CHANGELOG.txt README.txt WHAT_IS_NEW.txt
Log Message:
Bring changelog/what's new up to date.
Add a suggestion to read the FAQ to the readme.
Index: CHANGELOG.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/CHANGELOG.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** CHANGELOG.txt 5 Jun 2003 22:40:39 -0000 1.3
--- CHANGELOG.txt 12 Jun 2003 07:19:13 -0000 1.4
***************
*** 244,245 ****
--- 244,250 ----
Mark Hammond 04/06/03 In Outlook plugin, when filtering, saving the spam score is no longer fatal.
Tony Meyer 04/06/03 In muttrc, fix incorrect Spambayes header name.
+ Mark Hammond 05/06/03 Add a version information repository.
+ Mark Hammond 05/06/03 Change Outlook plugin to use new version information repository.
+ Neale Pickett 06/06/03 Integrated code for the VM mailer into spambayes.el
+ Tony Meyer 08/06/03 Add pop3proxy, hammie, smtpproxy & imapfilter version information.
+ Skip Montanaro 10/06/03 Correction to VM mailer addition to spambayes.el
Index: README.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/README.txt,v
retrieving revision 1.48
retrieving revision 1.49
diff -C2 -d -r1.48 -r1.49
*** README.txt 2 May 2003 04:05:11 -0000 1.48
--- README.txt 12 Jun 2003 07:19:13 -0000 1.49
***************
*** 26,29 ****
--- 26,32 ----
The code in this project requires Python 2.2 (or later).
+ You should definately check out the FAQ:
+ http://spambayes.org/faq.html
+
Primary Core Files
Index: WHAT_IS_NEW.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/WHAT_IS_NEW.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** WHAT_IS_NEW.txt 5 Jun 2003 22:40:40 -0000 1.3
--- WHAT_IS_NEW.txt 12 Jun 2003 07:19:13 -0000 1.4
***************
*** 28,37 ****
o Databases are saved after any training operation.
o Handle malformed messages better in the Outlook plugin.
! o In Outlook plugin, create our own toolbar, rather than using the standard one.
o Use 'wait' cursor when incremental training in Outlook plugin.
o In Outlook plugin, save config when dialog closes and not at shutdown.
o Clean up toolbar images.
o In Outlook plugin, no longer default to the "Inbox".
! o In Outlook plugin, when filtering, saving the spam score is no longer fatal.
POP3 Proxy
--- 28,39 ----
o Databases are saved after any training operation.
o Handle malformed messages better in the Outlook plugin.
! o In Outlook plugin, create our own toolbar, rather than using the
! standard one.
o Use 'wait' cursor when incremental training in Outlook plugin.
o In Outlook plugin, save config when dialog closes and not at shutdown.
o Clean up toolbar images.
o In Outlook plugin, no longer default to the "Inbox".
! o In Outlook plugin, when filtering, saving the spam score is no longer
! fatal.
POP3 Proxy
***************
*** 75,78 ****
--- 77,81 ----
o Test code moved out of pop3proxy.py.
o Web interface code abstracted out of pop3proxy.py.
+ o A version information repository for all applications.
General
***************
*** 97,103 ****
your septic system becomes "your septic system".
o
and tags are replaced with single blanks.
! o DB classifier keeps a list of "changed words" to prevent saves from updating *all* words.
o DB classifier no longer caches hapaxes.
o In muttrc, fix incorrect Spambayes header name.
--- 100,108 ----
your septic system becomes "your septic system".
o
and tags are replaced with single blanks.
! o DB classifier keeps a list of "changed words" to prevent saves from
! updating *all* words.
o DB classifier no longer caches hapaxes.
o In muttrc, fix incorrect Spambayes header name.
+ o Integrated code for the VM mailer into spambayes.el
From anadelonbrin at users.sourceforge.net Thu Jun 12 01:25:08 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Thu Jun 12 03:25:11 2003
Subject: [Spambayes-checkins]
spambayes CHANGELOG.txt, 1.4, 1.5 imapfilter.py,
1.43, 1.44 pop3proxy.py, 1.80, 1.81
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv17846
Modified Files:
CHANGELOG.txt imapfilter.py pop3proxy.py
Log Message:
Print out version information in pop3proxy and imapfilter.
Remove code from pop3proxy that has been commented out
for a *very* long time. (cvs will store it for us).
Index: CHANGELOG.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/CHANGELOG.txt,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** CHANGELOG.txt 12 Jun 2003 07:19:13 -0000 1.4
--- CHANGELOG.txt 12 Jun 2003 07:25:02 -0000 1.5
***************
*** 249,250 ****
--- 249,251 ----
Tony Meyer 08/06/03 Add pop3proxy, hammie, smtpproxy & imapfilter version information.
Skip Montanaro 10/06/03 Correction to VM mailer addition to spambayes.el
+ Tony Meyer 12/06/03 Update pop3proxy and imapfilter to print out version information.
Index: imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/imapfilter.py,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -d -r1.43 -r1.44
*** imapfilter.py 11 May 2003 22:49:41 -0000 1.43
--- imapfilter.py 12 Jun 2003 07:25:03 -0000 1.44
***************
*** 107,110 ****
--- 107,111 ----
from spambayes.UserInterface import UserInterfaceServer
from spambayes.ImapUI import IMAPUserInterface
+ from spambayes.Version import get_version_string
from imaplib import Debug
***************
*** 657,660 ****
--- 658,665 ----
elif opt == '-l':
sleepTime = int(arg) * 60
+
+ # Let the user know what they are using...
+ print get_version_string("IMAP Filter")
+ print "and engine %s.\n" % (get_version_string(),)
if not (doClassify or doTrain or launchUI):
Index: pop3proxy.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/pop3proxy.py,v
retrieving revision 1.80
retrieving revision 1.81
diff -C2 -d -r1.80 -r1.81
*** pop3proxy.py 5 May 2003 01:23:07 -0000 1.80
--- pop3proxy.py 12 Jun 2003 07:25:03 -0000 1.81
***************
*** 102,105 ****
--- 102,106 ----
from spambayes.UserInterface import UserInterfaceServer
from spambayes.ProxyUI import ProxyUserInterface
+ from spambayes.Version import get_version_string
# Increase the stack size on MacOS X. Stolen from Lib/test/regrtest.py
***************
*** 234,250 ****
return False
- ## This is an attempt to solve the problem whereby the email client
- ## times out and closes the connection but the ServerLineReader is still
- ## connected, so you get errors from the POP3 server next time because
- ## there's already an active connection. But after introducing this,
- ## I kept getting unexplained "Bad file descriptor" errors in recv.
- ##
- ## def handle_close(self):
- ## """If the email client closes the connection unexpectedly, eg.
- ## because of a timeout, close the server connection."""
- ## self.serverSocket.shutdown(2)
- ## self.serverSocket.close()
- ## self.close()
-
def collect_incoming_data(self, data):
"""Asynchat override."""
--- 235,238 ----
***************
*** 709,712 ****
--- 697,704 ----
elif opt == '-u':
state.uiPort = int(arg)
+
+ # Let the user know what they are using...
+ print get_version_string("POP3 Proxy")
+ print "and engine %s.\n" % (get_version_string(),)
# Do whatever we've been asked to do...
From mhammond at users.sourceforge.net Sun Jun 15 21:46:15 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Sun Jun 15 23:46:20 2003
Subject: [Spambayes-checkins] spambayes/spambayes OptionsClass.py, NONE,
1.1 Options.py, 1.54, 1.55
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv5044
Modified Files:
Options.py
Added Files:
OptionsClass.py
Log Message:
Split the class into its own file, so it is possible to use other
instances *without* loading the default SpamBayes options.
(Outlook now uses this file format, but stores its UI options in
a different file).
Allow lists to be used for multi-valued options (previously only
tuples were supported.)
Allow the first entry in the "defaults" table to be a sub-class of
Option - this allows custom packing/unpacking - currently only
used by Outlook to manage folder IDs (which are a list of tuples)
--- NEW FILE: OptionsClass.py ---
"""OptionsCore
Classes:
Option - Holds information about an option
OptionsClass - A collection of options
Abstract:
This module is used to manage "options" managed in user editable files.
This is the implementation of the Options.options globally shared options
object for the SpamBayes project, but is also able to be used to manage
other options required by each application.
The Option class holds information about an option - the name of the
option, a nice name (to display), documentation, default value,
possible values (a tuple or a regex pattern), whether multiple values
are allowed, and whether the option should be reset when restoring to
defaults (options like server names should *not* be).
The OptionsClass class provides facility for a collection of Options.
It is expected that manipulation of the options will be carried out
via an instance of this class.
To Do:
o Get rid of the really ugly backwards compatability code (that adds
many, many attributes to the options object) as soon as all the
modules are changed over.
o Once the above is done, and we have waited a suitable time, stop
allowing invalid options in configuration files
o Find a regex expert to come up with *good* patterns for domains,
email addresses, and so forth.
o str(Option) should really call Option.unconvert since this is what
it does. Try putting that in and running all the tests.
o [See also the __issues__ string.]
o Suggestions?
"""
# This module is part of the spambayes project, which is Copyright 2002-3
# The Python Software Foundation and is covered by the Python Software
# Foundation license.
__credits__ = "All the Spambayes folk."
# blame for the new format: Tony Meyer
__issues__ = """Things that should be considered further and by
other people:
We are very generous in checking validity when multiple values are
allowed and the check is a regex (rather than a tuple). Any sequence
that does not match the regex may be used to delimit the values.
For example, if the regex was simply r"[\d]*" then these would all
be considered valid:
"123a234" -> 123, 234
"123abced234" -> 123, 234
"123XST234xas" -> 123, 234
"123 234" -> 123, 234
"123~!@$%^&@234!" -> 123, 234
If this is a problem, my recommendation would be to change the
multiple_values_allowed attribute from a boolean to a regex/None
i.e. if multiple is None, then only one value is allowed. Otherwise
multiple is used in a re.split() to separate the input.
"""
import sys
import os
import shutil
from tempfile import TemporaryFile
try:
import cStringIO as StringIO
except ImportError:
import StringIO
import re
import types
import locale
try:
True, False, bool
except NameError:
# Maintain compatibility with Python 2.2
True, False = 1, 0
def bool(val):
return not not val
__all__ = ['OptionsClass',
'HEADER_NAME', 'HEADER_VALUE',
'INTEGER', 'REAL', 'BOOLEAN',
'SERVER', 'PORT', 'EMAIL_ADDRESS',
'PATH', 'VARIABLE_PATH', 'FILE', 'FILE_WITH_PATH',
'IMAP_FOLDER', 'IMAP_ASTRING',
'RESTORE', 'DO_NOT_RESTORE',
]
MultiContainerTypes = (types.TupleType, types.ListType)
class Option(object):
def __init__(self, name, nice_name="", default=None,
help_text="", allowed=None, restore=True):
self.name = name
self.nice_name = nice_name
self.default_value = default
self.explanation_text = help_text
self.allowed_values = allowed
self.restore = restore
self.delimiter = None
# start with default value
self.set(default)
def display_name(self):
'''A name for the option suitable for display to a user.'''
return self.nice_name
def default(self):
'''The default value for the option.'''
return self.default_value
def doc(self):
'''Documentation for the option.'''
return self.explanation_text
def valid_input(self):
'''Valid values for the option.'''
return self.allowed_values
def no_restore(self):
'''Do not restore this option when restoring to defaults.'''
return not self.restore
def set(self, val):
'''Set option to value.'''
self.value = val
def get(self):
'''Get option value.'''
return self.value
def multiple_values_allowed(self):
'''Multiple values are allowed for this option.'''
return type(self.value) in MultiContainerTypes
def is_valid(self, value):
'''Check if this is a valid value for this option.'''
# XXX This test is in the original code, but makes no sense....
# XXX self.allowed_values defaults to None, and if that is the
# XXX current value, then whatever is passed would be invalid
# XXX I agree this is a silly state to be in, but it is possible
# XXX I suppose that self.allowed_values should default to *any*
# XXX rather than None, but I'm not sure how to express that,
# XXX unless the regex r"." is correct.
if self.allowed_values is None:
return False
if type(self.value) in MultiContainerTypes:
return self.is_valid_multiple(value)
else:
return self.is_valid_single(value)
def is_valid_multiple(self, value):
'''Return True iff value is a valid value for this option.
Use if multiple values are allowed.'''
if type(value) in MultiContainerTypes:
for val in value:
if not self.is_valid_single(val):
return False
return True
return self.is_valid_single(value)
def is_valid_single(self, value):
'''Return True iff value is a valid value for this option.
Use when multiple values are not allowed.'''
if type(self.allowed_values) == types.TupleType:
if value in self.allowed_values:
return True
else:
return False
else:
# special handling for booleans, thanks to Python 2.2
if self.is_boolean and (value == True or value == False):
return True
if type(value) != type(self.value) and \
type(self.value) not in MultiContainerTypes:
# This is very strict! If the value is meant to be
# a real number and an integer is passed in, it will fail.
# (So pass 1. instead of 1, for example)
return False
avals = self._split_values(value)
# in this case, allowed_values must be a regex, and
# _split_values must match once and only once
if len(avals) == 1:
return True
else:
# either no match or too many matches
return False
def _split_values(self, value):
# do the regex mojo here
try:
r = re.compile(self.allowed_values)
except:
print self.allowed_values
raise
s = str(value)
i = 0
vals = ()
while True:
m = r.search(s[i:])
if m is None:
break
vals += (m.group(),)
delimiter = s[i:i + m.start()]
if self.delimiter is None and delimiter != "":
self.delimiter = delimiter
i += m.end()
return vals
def as_nice_string(self, section=None):
'''Summarise the option in a user-readable format.'''
if section is None:
strval = ""
else:
strval = "[%s] " % (section)
strval += "%s - \"%s\"\nDefault: %s\nDo not restore: %s\n" \
% (self.name, self.display_name(),
str(self.default()), str(self.no_restore()))
strval += "Valid values: %s\nMultiple values allowed: %s\n" \
% (str(self.valid_input()),
str(self.multiple_values_allowed()))
strval += "\"%s\"\n\n" % (str(self.doc()))
return strval
def write_config(self, file):
'''Output value in configuration file format.'''
file.write(self.name)
file.write(': ')
file.write(self.unconvert())
file.write('\n')
def convert(self, value):
'''Convert value from a string to the appropriate type.'''
svt = type(self.value)
if svt == type(value):
# already the correct type
return value
if self.is_boolean():
if str(value) == "True" or value == 1:
return True
elif str(value) == "False" or value == 0:
return False
raise TypeError, self.name + " must be True or False"
if self.multiple_values_allowed():
# This will fall apart if the allowed_value is a tuple,
# but not a homogenous one...
if type(self.allowed_values) in types.StringTypes:
vals = list(self._split_values(value))
else:
vals = value.split()
if len(self.default_value) > 0:
to_type = type(self.default_value[0])
else:
to_type = types.StringType
for i in range(0, len(vals)):
vals[i] = self._convert(vals[i], to_type)
return tuple(vals)
else:
return self._convert(value, svt)
raise TypeError, self.name + " has an invalid type."
def _convert(self, value, to_type):
'''Convert an int, float or string to the specified type.'''
if to_type == type(value):
# already the correct type
return value
if to_type == types.IntType:
return locale.atoi(value)
if to_type == types.FloatType:
return locale.atof(value)
if to_type in types.StringTypes:
return str(value)
raise TypeError, "Invalid type."
def unconvert(self):
'''Convert value from the appropriate type to a string.'''
if type(self.value) in types.StringTypes:
# nothing to do
return self.value
if self.is_boolean():
# A wee bit extra for Python 2.2
if self.value == True:
return "True"
else:
return "False"
if type(self.value) == types.TupleType:
if len(self.value) == 0:
return ""
if len(self.value) == 1:
v = self.value[0]
if type(v) == types.FloatType:
return locale.str(self.value[0])
return str(v)
# We need to separate out the items
strval = ""
# We use a character that is invalid as the separator
# so that it will reparse correctly. We could try all
# characters, but we make do with this set of commonly
# used ones - note that the first one that works will
# be used. Perhaps a nicer solution than this would be
# to specifiy a valid delimiter for all options that
# can have multiple values. Note that we have None at
# the end so that this will crash and die if none of
# the separators works .
if self.delimiter is None:
if type(self.allowed_values) == types.TupleType:
self.delimiter = ' '
else:
v0 = self.value[0]
v1 = self.value[1]
for sep in [' ', ',', ':', ';', '/', '\\', None]:
# we know at this point that len(self.value) is at
# least two, because len==0 and len==1 were dealt
# with as special cases
test_str = str(v0) + sep + str(v1)
test_tuple = self._split_values(test_str)
if test_tuple[0] == str(v0) and \
test_tuple[1] == str(v1) and \
len(test_tuple) == 2:
break
# cache this so we don't always need to do the above
self.delimiter = sep
for v in self.value:
if type(v) == types.FloatType:
v = locale.str(v)
else:
v = str(v)
strval += v + self.delimiter
strval = strval[:-len(self.delimiter)] # trailing seperator
else:
# Otherwise, we just hope str() will do the job
strval = str(self.value)
return strval
def is_boolean(self):
'''Return True iff the option is a boolean value.'''
# This is necessary because of the Python 2.2 True=1, False=0
# cheat. The valid values are returned as 0 and 1, even if
# they are actually False and True - but 0 and 1 are not
# considered valid input (and 0 and 1 don't look as nice)
# So, just for the 2.2 people, we have this helper function
try:
if type(self.allowed_values) == types.TupleType and \
len(self.allowed_values) > 0 and \
type(self.allowed_values[0]) == types.BooleanType:
return True
return False
except AttributeError:
# If the user has Python 2.2 and an option has valid values
# of (0, 1) - i.e. integers, then this function will return
# the wrong value. I don't know what to do about that without
# explicitly stating which options are boolean
if self.allowed_values == (False, True):
return True
return False
class OptionsClass(object):
def __init__(self):
self.verbose = None
self._options = {}
self.conversion_table = {} # set by creator if they need it.
#
# Regular expressions for parsing section headers and options.
# Lifted straight from ConfigParser
#
SECTCRE = re.compile(
r'\[' # [
r'(?P[^]]+)' # very permissive!
r'\]' # ]
)
OPTCRE = re.compile(
r'(?P
+
+
Installing the Outlook Client From Source
+
+
If the Outlook binary doesn't work for you, you can install from source.
+ To do this, you will need three pieces of software:
+
+
+
The Python installer, available from the download page of the Python
+ website. You should choose the latest stable release (that is, the
+ latest release with no letters in its version).
+
+
Mark Hammond's win32all
+ extensions. Choose the version which corresponds to the version of
+ Python you downloaded.
+
+
The Spambayes source, either as a zip
+ file or via
+ CVS. The zip file will probably be easier to handle, but there are
+ several significant improvements to the code which make the CVS version a
+ viable option (though you will have to have a CVS client for Windows
+ installed).
+
+
+
+
Once you have all three bits downloaded, run the Python installer then
+ the win32all installer. Finally, double-click the addin.py script in the
+ Outlook2000 folder of the Spambayes distribution and you should be good to
+ go.
Other Mail Clients
From montanaro at users.sourceforge.net Tue Jun 17 15:37:44 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Tue Jun 17 17:37:47 2003
Subject: [Spambayes-checkins] website faq.txt,1.3,1.4
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv25778
Modified Files:
faq.txt
Log Message:
add a question and answer about things to check when the classifier isn't.
Index: faq.txt
===================================================================
RCS file: /cvsroot/spambayes/website/faq.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** faq.txt 5 Jun 2003 14:19:01 -0000 1.3
--- faq.txt 17 Jun 2003 21:37:40 -0000 1.4
***************
*** 480,483 ****
--- 480,509 ----
+ Spambayes doesn't seem to catch much spam. What gives?
+ -------------------------------------------------------
+
+ Initially, Spambayes will not be able to distinguish spams from hams. With
+ no training inputs, the classifier will simply mark everything unsure. Once
+ you start training the classifier on a representative set of spams and hams
+ it should very quickly begin to improve, however. If that's not the case,
+ perhaps you have something misconfigured. Here are a couple things to
+ check:
+
+ 1. What do you have your ham and spam thresholds set to? The defaults are
+ 0.2 and 0.9, respectively, and should be reasonable starting points.
+ They should not be close together (say, 0.4 and 0.6).
+
+ 2. Have you trained on a reasonable number of hams and spams? You should
+ train on 10 to 20 of each to start with just to get a decent base. After
+ that, you should be able to train on just mistakes and messages
+ classified as unsure.
+
+ 3. Check to be sure you haven't made any classification mistakes (trained
+ spams as hams or vice versa). If so, you could really confuse things and
+ should move incorrectly classified messages to their correct locations
+ and retrain (which may happen automatically, depending on how you're
+ using Spambayes).
+
+
How do I start from scratch after messing up my training?
---------------------------------------------------------
From montanaro at users.sourceforge.net Tue Jun 17 16:01:39 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Tue Jun 17 18:01:41 2003
Subject: [Spambayes-checkins] website Makefile,1.3,1.4
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv29599
Modified Files:
Makefile
Log Message:
define EXTRA_TARGETS before the include so make decides that EXTRA_TARGETS
are part of TARGETS when deciding what files 'all' depends on
Index: Makefile
===================================================================
RCS file: /cvsroot/spambayes/website/Makefile,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Makefile 31 May 2003 01:35:43 -0000 1.3
--- Makefile 17 Jun 2003 22:01:37 -0000 1.4
***************
*** 1,7 ****
include scripts/make.rules
ROOT_DIR = .
ROOT_OFFSET = .
-
- EXTRA_TARGETS = reply.txt faq.html default.css
$(TARGETS): links.h
--- 1,8 ----
+ # this def'n must occur before the include!
+ EXTRA_TARGETS = reply.txt faq.html default.css
+
include scripts/make.rules
ROOT_DIR = .
ROOT_OFFSET = .
$(TARGETS): links.h
From mhammond at users.sourceforge.net Tue Jun 17 19:56:20 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 17 21:56:23 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 about.html,1.11,1.12
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv28020
Modified Files:
about.html
Log Message:
Reference the new configuration guide.
Index: about.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/about.html,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** about.html 4 Jun 2003 02:59:03 -0000 1.11
--- about.html 18 Jun 2003 01:56:18 -0000 1.12
***************
*** 39,42 ****
--- 39,44 ----
software.
+ If you would like to see some additional options you can set, please
+ see the configuration guide.
If you have any problems, please see the troubleshooting guide.
***************
*** 159,163 ****
!
Viewing and Using the Spam Score Field
A custom property named Spam
--- 161,167 ----
! There are some additional options that can be set outside of the user
! interface - please see the configuration
! guide for more details.
Viewing and Using the Spam Score Field
A custom property named Spam
From mhammond at users.sourceforge.net Tue Jun 17 19:56:53 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 17 21:56:57 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs configuration.html,
NONE, 1.1
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv28069
Added Files:
configuration.html
Log Message:
Document some additional options and how config files are used.
--- NEW FILE: configuration.html ---
SpamBayes Configuration
SpamBayes Configuration
Many SpamBayes configuration options are managed via the SpamBayes
manager, available from the SpamBayes toolbar item. While this
dialog allows you to configure standard options, there are a number of
other options that can be set manually.
WARNING: Please read the
following before going any further.
To change these options, you will need to use a text editor to
edit the main SpamBayes configuration file. If something goes
wrong here, you may lose your existing SpamBayes configuration.
Taking a copy of any files you edit is recommended.
SpamBayes stores all configuration options, including the list of
folders, in this file. Do NOT change anything you don't
understand. Some of these lines are extremely long - please
ensure they remain as a single line.
Before manually changing any configuration files, please ensure
you have shut down Outlook - otherwise the configuration changes you
have made will be lost if SpamBayes itself automatically saves its
configuration.
If you have any further questions, please post them to the SpamBayes
mailing list.
About SpamBayes configuration files
SpamBayes configuration options are stored in the directory \Documents and
Settings\{username}\Application
Data\SpamBayes\{outlook-profile-name}.ini. Note that the
name of the file depends on the name of your current Outlook profile;
if you use Outlook in Internet Only mode, then the profile is generally
named Microsoft Outlook Internet
Settings. This file is a standard text file, and can be
edited with any text editor.
A configuration file has a number of sections, and each section
contains a number of named values. For example, you will find the
following excerpt in your INI file:
[Filter]
enabled:True
This defines a section named Filter,
with value enabled set to
value True. The valid
section names, value names and valid values depends on the
option. Note that in some cases, we will refer to options being
in a certain section, but when you check your INI file, you will find
no such section defined. In this case, simply add the section
header, and any values manually. For example, it will not be
uncommon for you to add a line
[General]
if you need to set options in this section, as by default, you INI file
will have no such section.
Additional Options
The following options are supported in this version
Section
Option Name
Valid Values
Default
Comments
[Filter]
spam_mark_as_read
True, False
True
Determines if spam messages are
marked as 'Read' as they are filtered. This can be set to 'True'
if the new-mail icon bothers you when the only new items are
spam. It can be set to 'False' if you use the 'read' state of
these messages to determine which items you are yet to review.
[Filter]
unsure_mark_as_read
True, False
False
Determines if unsure messages
are marked as 'Read' as they are filtered.
See 'spam_mark_as_read' for more details.
[General]
field_score_name
Spam
The name of the field used by
SpamBayes to record spam scores. This should only be changed if
you know what you are doing.
[General]
delete_as_spam_message_state
None, Read, Unread
None
Determines how to set the "Read"
state of a message as they are manually managed by the "Delete as Spam"
button. By default, the 'Read' state of the message is not
changed, but this allows you to explicitly change it to either 'read'
or 'unread'.
[General]
recover_from_spam_message_state
None, Read, Unread
None
Determines how to set the "Read"
state of a message as they are
manually managed by the "Recover from Spam" button. By default,
the
'Read' state of the message is not changed, but this allows you to
explicitly change it to either 'read' or 'unread'.
[General]
data_directory
The directory where SpamBayes
will save its database and primary configuration file. This can
only be set in the 'early' configuration files - see below.
Multiple Configuration Files
There is rudimentary support for multiple configuration files.
The intention of these files is to site administrators can set global
options for all SpamBayes users. Only some options make sense to
store in other configuration files.
All options from all configuration files are "merged". This means
that any file can set any option, and as all options files are
processed, all values are merged. If multiple configuration files
specify the same option, the value from the file last merged is
used. When SpamBayes writes its configuration during normal
processing, the entire merged set of options is written. The end
result of this means that next time SpamBayes is run, the earlier
configuration files will have no effect, as the last one loaded (the
main config file written by SpamBayes) will have all values already.
SpamBayes processes configuration files in the following order:
default_configuration.ini
in the SpamBayes application directory (ie, the directory where the
application lives). By default, no such configuration file will
exist.
default_configuration.ini
in the directory \Documents and
Settings\{username}\Application Data\SpamBayes. By
default, no such configuration file will exist.
SpamBayes then checks to see if a data_directory has been specified
in a [General] section.
If so, this is used as the SpamBayes data directory - otherwise, the \Documents and
Settings\{username}\Application Data\SpamBayes directory is used.
{outlook-profile-name}.ini
in the data directory. Using the name of the Outlook profile
means that SpamBayes will work in a multi-profile environment.
The mail SpamBayes databases are then loaded from the nominated
data directory.
From mhammond at users.sourceforge.net Tue Jun 17 19:59:04 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 17 21:59:07 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 config.py, 1.10,
1.11 filter.py, 1.24, 1.25
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv28419
Modified Files:
config.py filter.py
Log Message:
Allow either spam or unsure messages to be marked as read as they
are filtered.
Index: config.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/config.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** config.py 17 Jun 2003 02:04:11 -0000 1.10
--- config.py 18 Jun 2003 01:59:02 -0000 1.11
***************
*** 158,161 ****
--- 158,168 ----
"""""",
FILTER_ACTION, RESTORE),
+ ("spam_mark_as_read", "Should filtered spam also be marked as 'read'", True,
+ """Determines if spam messages are marked as 'Read' as they are
+ filtered. This can be set to 'True' if the new-mail icon bothers
+ you when the only new items are spam. It can be set to 'False'
+ if you use the 'read' state of these messages to determine which
+ items you are yet to review.""",
+ BOOLEAN, RESTORE),
(FolderIDOption,
"unsure_folder_id", "The folder used to track uncertain messages", None,
***************
*** 168,171 ****
--- 175,182 ----
"""""",
FILTER_ACTION, RESTORE),
+ ("unsure_mark_as_read", "Should filtered uncertain message also be marked as 'read'", False,
+ """Determines if unsure messages are marked as 'Read' as they are
+ filtered. See 'spam_mark_as_read' for more details.""",
+ BOOLEAN, RESTORE),
("enabled", "Is filtering enabled?", False,
"""""",
Index: filter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/filter.py,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** filter.py 17 Jun 2003 02:04:11 -0000 1.24
--- filter.py 18 Jun 2003 01:59:02 -0000 1.25
***************
*** 54,57 ****
--- 54,60 ----
folder_id = getattr(config, attr_prefix + "_folder_id")
action = getattr(config, attr_prefix + "_action").lower()
+ mark_as_read = getattr(config, attr_prefix + "_mark_as_read")
+ if mark_as_read:
+ msg.SetReadState(True)
if action.startswith("un"): # untouched
pass
From mhammond at users.sourceforge.net Tue Jun 17 20:29:51 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 17 22:29:55 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs configuration.html,
1.1, 1.2
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv31770/docs
Modified Files:
configuration.html
Log Message:
Tony is correct - we should default to False, even just to convince
new users that Spam should be reviewed.
Index: configuration.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/configuration.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** configuration.html 18 Jun 2003 01:56:51 -0000 1.1
--- configuration.html 18 Jun 2003 02:29:49 -0000 1.2
***************
*** 85,90 ****
True, False
!
True
!
Determines if spam messages are
marked as 'Read' as they are filtered. This can be set to 'True'
--- 85,89 ----
True, False
!
False
Determines if spam messages are
marked as 'Read' as they are filtered. This can be set to 'True'
From mhammond at users.sourceforge.net Tue Jun 17 20:29:51 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 17 22:29:56 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 config.py,1.11,1.12
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv31770
Modified Files:
config.py
Log Message:
Tony is correct - we should default to False, even just to convince
new users that Spam should be reviewed.
Index: config.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/config.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** config.py 18 Jun 2003 01:59:02 -0000 1.11
--- config.py 18 Jun 2003 02:29:49 -0000 1.12
***************
*** 158,162 ****
"""""",
FILTER_ACTION, RESTORE),
! ("spam_mark_as_read", "Should filtered spam also be marked as 'read'", True,
"""Determines if spam messages are marked as 'Read' as they are
filtered. This can be set to 'True' if the new-mail icon bothers
--- 158,162 ----
"""""",
FILTER_ACTION, RESTORE),
! ("spam_mark_as_read", "Should filtered spam also be marked as 'read'", False,
"""Determines if spam messages are marked as 'Read' as they are
filtered. This can be set to 'True' if the new-mail icon bothers
From mhammond at users.sourceforge.net Tue Jun 17 22:47:35 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 18 00:47:38 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.62,1.63
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv22310
Modified Files:
addin.py
Log Message:
More work on the toolbar. OnActivate *does* crash Outlook 2000, just like
the comment say - except only as a new window is created.
Button events are only hooked once - this prevents multiple events being
dispatched when multiple windows are open.
Only create a SpamBayes toolbar once. If the toolbar was created for
one explorer Window, newly created Windows don't see the new toolbar (but
they do once outlook is restarted). Creating a second toolbar in this case
would cause Outlook to start with 2 SpamBayes toolbars. This is bad. The
end result is that if multiple windows are created the first time SpamBayes
is run, only one window gets the toolbar. Subsequent runs of Outlook
then work correctly.
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.62
retrieving revision 1.63
diff -C2 -d -r1.62 -r1.63
*** addin.py 17 Jun 2003 04:23:29 -0000 1.62
--- addin.py 18 Jun 2003 04:47:33 -0000 1.63
***************
*** 479,492 ****
# All UI elements are managed here, and there is one instance per explorer.
class ExplorerWithEvents:
! def Init(self, manager, explorer_list):
self.manager = manager
self.have_setup_ui = False
! self.explorer_list = explorer_list
self.toolbar = None
- self.buttons = []
def SetupUI(self):
manager = self.manager
- self.buttons = []
activeExplorer = self
assert self.toolbar is None, "Should not yet have a toolbar"
--- 479,490 ----
# All UI elements are managed here, and there is one instance per explorer.
class ExplorerWithEvents:
! def Init(self, manager, explorers_collection):
self.manager = manager
self.have_setup_ui = False
! self.explorers_collection = explorers_collection
self.toolbar = None
def SetupUI(self):
manager = self.manager
activeExplorer = self
assert self.toolbar is None, "Should not yet have a toolbar"
***************
*** 515,540 ****
Enabled = True,
Tag = "SpamBayesCommand.Popup")
! # Convert from "CommandBarItem" to derived
! # "CommandBarPopup" Not sure if we should be able to work
! # this out ourselves, but no introspection I tried seemed
! # to indicate we can. VB does it via strongly-typed
! # declarations.
! popup = CastTo(popup, "CommandBarPopup")
! # And add our children.
! self._AddControl(popup,
! constants.msoControlButton,
! ButtonEvent, (manager.ShowManager,),
! Caption="Anti-Spam Manager...",
! TooltipText = "Show the Anti-Spam manager dialog.",
! Enabled = True,
! Visible=True,
! Tag = "SpamBayesCommand.Manager")
! self._AddControl(popup,
! constants.msoControlButton,
! ButtonEvent, (ShowClues, self.manager, self),
! Caption="Show spam clues for current message",
! Enabled=True,
! Visible=True,
! Tag = "SpamBayesCommand.Clues")
# If we are running from Python sources, enable a few extra items
if not hasattr(sys, "frozen"):
--- 513,539 ----
Enabled = True,
Tag = "SpamBayesCommand.Popup")
! if popup is not None: # We may not be able to find/create our button
! # Convert from "CommandBarItem" to derived
! # "CommandBarPopup" Not sure if we should be able to work
! # this out ourselves, but no introspection I tried seemed
! # to indicate we can. VB does it via strongly-typed
! # declarations.
! popup = CastTo(popup, "CommandBarPopup")
! # And add our children.
! self._AddControl(popup,
! constants.msoControlButton,
! ButtonEvent, (manager.ShowManager,),
! Caption="Anti-Spam Manager...",
! TooltipText = "Show the Anti-Spam manager dialog.",
! Enabled = True,
! Visible=True,
! Tag = "SpamBayesCommand.Manager")
! self._AddControl(popup,
! constants.msoControlButton,
! ButtonEvent, (ShowClues, self.manager, self),
! Caption="Show spam clues for current message",
! Enabled=True,
! Visible=True,
! Tag = "SpamBayesCommand.Clues")
# If we are running from Python sources, enable a few extra items
if not hasattr(sys, "frozen"):
***************
*** 566,572 ****
# that.
assert item_attrs.has_key('Tag'), "Need a 'Tag' attribute!"
item = self.CommandBars.FindControl(
Type = control_type,
! Tag = item_attrs['Tag'])
if item is None:
if parent is None:
--- 565,572 ----
# that.
assert item_attrs.has_key('Tag'), "Need a 'Tag' attribute!"
+ tag = item_attrs["Tag"]
item = self.CommandBars.FindControl(
Type = control_type,
! Tag = tag)
if item is None:
if parent is None:
***************
*** 588,608 ****
# for not broken - can't find toolbar. Create a new one.
# Create it as a permanent one (which is default)
print "Creating new SpamBayes toolbar to host our buttons"
self.toolbar = bars.Add(toolbar_name, constants.msoBarTop, Temporary=False)
self.toolbar.Visible = True
parent = self.toolbar
# Now add the item itself to the parent.
item = parent.Controls.Add(Type=control_type, Temporary=False)
! # Hook events for the item
! if events_class is not None:
item = DispatchWithEvents(item, events_class)
item.Init(*events_init_args)
# Set the extra attributes passed in.
for attr, val in item_attrs.items():
setattr(item, attr, val)
- # remember and return the item.
- # (not remembering causes events to get disconnected as our objects
- # destruct)
- self.buttons.append(item)
return item
--- 588,618 ----
# for not broken - can't find toolbar. Create a new one.
# Create it as a permanent one (which is default)
+ if self.explorers_collection.have_created_toolbar:
+ # Eeek - we have already created a toolbar, but
+ # now we can't find it. It is likely this is the
+ # first time we are being run, and outlook is
+ # being started with multiple Windows open.
+ # Hopefully things will get back to normal once
+ # Outlook is restarted (which testing shows it does)
+ return
+
print "Creating new SpamBayes toolbar to host our buttons"
self.toolbar = bars.Add(toolbar_name, constants.msoBarTop, Temporary=False)
+ self.explorers_collection.have_created_toolbar = True
self.toolbar.Visible = True
parent = self.toolbar
# Now add the item itself to the parent.
item = parent.Controls.Add(Type=control_type, Temporary=False)
! # Hook events for the item, but only if we haven't already in some
! # other explorer instance.
! if events_class is not None and tag not in self.explorers_collection.button_event_map:
item = DispatchWithEvents(item, events_class)
item.Init(*events_init_args)
+ # We must remember the item itself, else the events get disconnected
+ # as the item destructs.
+ self.explorers_collection.button_event_map[tag] = item
# Set the extra attributes passed in.
for attr, val in item_attrs.items():
setattr(item, attr, val)
return item
***************
*** 631,643 ****
# The Outlook event handlers
def OnActivate(self):
# See comments for OnNewExplorer below.
# *sigh* - OnActivate seems too early too for Outlook 2000,
# but Outlook 2003 seems to work here, and *not* the folder switch etc
! # This also appears to solve some issues relating to multi-profiles
! # on 2000 (where secondary profiles appears to behave closer to 2003)
! if not self.have_setup_ui:
! self.SetupUI()
def OnSelectionChange(self):
# See comments for OnNewExplorer below.
if not self.have_setup_ui:
--- 641,655 ----
# The Outlook event handlers
def OnActivate(self):
+ #print "OnActivate", self
# See comments for OnNewExplorer below.
# *sigh* - OnActivate seems too early too for Outlook 2000,
# but Outlook 2003 seems to work here, and *not* the folder switch etc
! # Outlook 2000 crashes when a second window is created and we use this
! # event
! # OnViewSwitch however seems useful, so we ignore this.
! pass
def OnSelectionChange(self):
+ #print "OnSelChange", self
# See comments for OnNewExplorer below.
if not self.have_setup_ui:
***************
*** 647,661 ****
def OnClose(self):
! self.explorer_list.remove(self)
! self.explorer_list = None
! for button in self.buttons:
! closer = getattr(button, "Close", None)
! if closer is not None:
! closer()
self.toolbar = None
- self.buttons = []
self.close() # disconnect events.
def OnFolderSwitch(self):
# Yet another worm-around for our event timing woes. This may
# be the first event ever seen for this explorer if, eg,
--- 659,670 ----
def OnClose(self):
! #print "OnClose", self
! self.explorers_collection._DoDeadExplorer(self)
! self.explorers_collection = None
self.toolbar = None
self.close() # disconnect events.
def OnFolderSwitch(self):
+ #print "OnFolderSwitch", self
# Yet another worm-around for our event timing woes. This may
# be the first event ever seen for this explorer if, eg,
***************
*** 692,697 ****
import traceback
traceback.print_exc()
! self.but_recover_as.Visible = show_recover_as
! self.but_delete_as.Visible = show_delete_as
# Events from our "Explorers" collection (not an Explorer instance)
--- 701,713 ----
import traceback
traceback.print_exc()
! if self.but_recover_as is not None:
! self.but_recover_as.Visible = show_recover_as
! if self.but_delete_as is not None:
! self.but_delete_as.Visible = show_delete_as
!
! def OnViewSwitch(self):
! #print "OnViewSwitch", self
! if not self.have_setup_ui:
! self.SetupUI()
# Events from our "Explorers" collection (not an Explorer instance)
***************
*** 700,714 ****
self.manager = manager
self.explorers = []
def Close(self):
self.explorers = None
! def _DoNewExplorer(self, explorer, do_activate):
explorer = DispatchWithEvents(explorer, ExplorerWithEvents)
! explorer.Init(self.manager, self.explorers)
! if do_activate:
! explorer.OnActivate()
self.explorers.append(explorer)
def OnNewExplorer(self, explorer):
# NOTE - Outlook has a bug, as confirmed by many on Usenet, in
--- 716,741 ----
self.manager = manager
self.explorers = []
+ self.have_created_toolbar = False
+ self.button_event_map = {}
def Close(self):
self.explorers = None
! def _DoNewExplorer(self, explorer):
explorer = DispatchWithEvents(explorer, ExplorerWithEvents)
! explorer.Init(self.manager, self)
self.explorers.append(explorer)
+ def _DoDeadExplorer(self, explorer):
+ self.explorers.remove(explorer)
+ if len(self.explorers)==0:
+ # No more explorers - disconnect all events.
+ # (not doing this causes shutdown problems)
+ for tag, button in self.button_event_map.items():
+ closer = getattr(button, "Close", None)
+ if closer is not None:
+ closer()
+ self.button_event_map = {}
+
def OnNewExplorer(self, explorer):
# NOTE - Outlook has a bug, as confirmed by many on Usenet, in
***************
*** 721,725 ****
# view with no items (eg, Outlook Today) - so at the end of the
# day, we can never assume we have been initialized!
! self._DoNewExplorer(explorer, False)
# The outlook Plugin COM object itself.
--- 748,752 ----
# view with no items (eg, Outlook Today) - so at the end of the
# day, we can never assume we have been initialized!
! self._DoNewExplorer(explorer)
# The outlook Plugin COM object itself.
***************
*** 755,767 ****
(get_version_string("Outlook"), get_version_string())
! explorers = application.Explorers
! # and Explorers events so we know when new explorers spring into life.
! self.explorers_events = WithEvents(explorers, ExplorersEvent)
! self.explorers_events.Init(self.manager)
! # And hook our UI elements to all existing explorers
! for i in range(explorers.Count):
! explorer = explorers.Item(i+1)
! self.explorers_events._DoNewExplorer(explorer, True)
!
if self.manager.config.filter.enabled:
# A little "sanity test" to help the user. If our status is
--- 782,787 ----
(get_version_string("Outlook"), get_version_string())
! self.explorers_events = None # create at OnStartupComplete
!
if self.manager.config.filter.enabled:
# A little "sanity test" to help the user. If our status is
***************
*** 890,894 ****
pass
def OnStartupComplete(self, custom):
! pass
def OnBeginShutdown(self, custom):
pass
--- 910,923 ----
pass
def OnStartupComplete(self, custom):
! # Toolbar and other UI stuff must be setup once startup is complete.
! explorers = self.application.Explorers
! # and Explorers events so we know when new explorers spring into life.
! self.explorers_events = WithEvents(explorers, ExplorersEvent)
! self.explorers_events.Init(self.manager)
! # And hook our UI elements to all existing explorers
! for i in range(explorers.Count):
! explorer = explorers.Item(i+1)
! self.explorers_events._DoNewExplorer(explorer)
!
def OnBeginShutdown(self, custom):
pass
From mhammond at users.sourceforge.net Wed Jun 18 07:05:58 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 18 09:06:01 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.63,1.64
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv21220
Modified Files:
addin.py
Log Message:
"Anti-Spam Manager" -> "SpamBayes Manager"
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.63
retrieving revision 1.64
diff -C2 -d -r1.63 -r1.64
*** addin.py 18 Jun 2003 04:47:33 -0000 1.63
--- addin.py 18 Jun 2003 13:05:55 -0000 1.64
***************
*** 524,529 ****
constants.msoControlButton,
ButtonEvent, (manager.ShowManager,),
! Caption="Anti-Spam Manager...",
! TooltipText = "Show the Anti-Spam manager dialog.",
Enabled = True,
Visible=True,
--- 524,529 ----
constants.msoControlButton,
ButtonEvent, (manager.ShowManager,),
! Caption="SpamBayes Manager...",
! TooltipText = "Show the SpamBayes manager dialog.",
Enabled = True,
Visible=True,
From mhammond at users.sourceforge.net Wed Jun 18 07:10:23 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 18 09:10:26 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs
troubleshooting.html, 1.7, 1.8
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv21826/docs
Modified Files:
troubleshooting.html
Log Message:
"Anti-Spam" -> "SpamBayes"
Index: troubleshooting.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/troubleshooting.html,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** troubleshooting.html 4 Jun 2003 02:55:59 -0000 1.7
--- troubleshooting.html 18 Jun 2003 13:10:21 -0000 1.8
***************
*** 22,27 ****
Addin doesn't load
! When you start Outlook, there is no Anti-Spam item in the
! toolbar, and no filtering is happening. To resolve this:
--- 22,27 ----
Addin doesn't load
! When you start Outlook, there is no SpamBayes item in the
! toolbar, and no filtering occurs. To resolve this:
Check that filtering is enabled. Select the Anti-Spam
manager, then ensure the button Enable Filtering is checked. If
you are unable to select this button due to insufficient training
--- 135,139 ----
completely blank spam score. To resolve this:
!
Check that filtering is enabled. Select the SpamBayes
manager, then ensure the button Enable Filtering is checked. If
you are unable to select this button due to insufficient training
***************
*** 158,162 ****
If the messages are all scoring as "unsure", with a score of 0.5,
then you may have lost your training database. From the Anti-Spam manager dropdown, check
how many spam and ham have been loaded by the system. If this
number is very low (like zero!) then you probably need to perform a
--- 158,162 ----
If the messages are all scoring as "unsure", with a score of 0.5,
then you may have lost your training database. From the SpamBayes manager dropdown, check
how many spam and ham have been loaded by the system. If this
number is very low (like zero!) then you probably need to perform a
***************
*** 171,175 ****
Ensure the message is selected in the Outlook preview pane, and
! from the Anti-Spam manager
dropdown, select Show Spam clues for
current message. This should open a new mail message with
--- 171,175 ----
Ensure the message is selected in the Outlook preview pane, and
! from the SpamBayes manager
dropdown, select Show Spam clues for
current message. This should open a new mail message with
From mhammond at users.sourceforge.net Wed Jun 18 07:10:23 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 18 09:10:28 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 README.txt, 1.9,
1.10 about.html, 1.12, 1.13
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv21826
Modified Files:
README.txt about.html
Log Message:
"Anti-Spam" -> "SpamBayes"
Index: README.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/README.txt,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** README.txt 12 Feb 2003 22:02:16 -0000 1.9
--- README.txt 18 Jun 2003 13:10:20 -0000 1.10
***************
*** 9,13 ****
==========
If you execute "addin.py", the Microsoft Outlook plugin will be installed.
! Next time outlook is started, you should see a "Anti-Spam" drop-down
on the toolbar. Clicking it will allow you to maintain your bayes database
and filters.
--- 9,13 ----
==========
If you execute "addin.py", the Microsoft Outlook plugin will be installed.
! Next time outlook is started, you should see a "SpamBayes" drop-down
on the toolbar. Clicking it will allow you to maintain your bayes database
and filters.
Index: about.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/about.html,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** about.html 18 Jun 2003 01:56:18 -0000 1.12
--- about.html 18 Jun 2003 13:10:20 -0000 1.13
***************
*** 107,111 ****
Start Outlook, select your Inbox, then look at your Outlook
toolbar. Just below the standard Toolbar, you should see a new
! toolbar with an Anti-Spam
dropdown button. If this button appears, then the plugin is
correctly installed and ready to use. If the button does not
--- 107,111 ----
Start Outlook, select your Inbox, then look at your Outlook
toolbar. Just below the standard Toolbar, you should see a new
! toolbar with a SpamBayes
dropdown button. If this button appears, then the plugin is
correctly installed and ready to use. If the button does not
***************
*** 129,134 ****
Configure and Train SpamBayes
Now we have our folders setup with some initial training data, we can
! configure the plugin. From the Anti-Spam
! button on the toolbar select Anti-Spam
Manager... This will display the main dialog, as shown to
the right.
--- 129,134 ----
Configure and Train SpamBayes
Now we have our folders setup with some initial training data, we can
! configure the plugin. From the SpamBayes
! button on the toolbar select SpamBayes
Manager... This will display the main dialog, as shown to
the right.
***************
*** 143,147 ****
will be displayed as your messages are trained, and another progress
indicator as they are scored. Close the training window to return
! to the Anti-Spam window.
--- 143,147 ----
will be displayed as your messages are trained, and another progress
indicator as they are scored. Close the training window to return
! to the SpamBayes window.
***************
*** 149,153 ****
src="docs/images/manager.jpg" title="" alt="Anti-Spam manager"
style="width: 369px; height: 335px;">
!
The Anti-Spam Manager dialog
!
The SpamBayes Manager dialog
Configuring the plugin for filtering
Once the system is trained an configured, you are ready to enable the
! filtering capabilities. From the Anti-Spam manager, select Filters. From this dialog you
can select all the folders that you wish to watch for spam. You
--- 242,246 ----
Configuring the plugin for filtering
Once the system is trained an configured, you are ready to enable the
! filtering capabilities. From the SpamBayes manager, select Filters. From this dialog you
can select all the folders that you wish to watch for spam. You
From mhammond at users.sourceforge.net Wed Jun 18 07:15:13 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 18 09:15:16 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs
troubleshooting.html, 1.8, 1.9
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv22508/docs
Modified Files:
troubleshooting.html
Log Message:
Add a link to the online version of the troubleshooting document.
Index: troubleshooting.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/troubleshooting.html,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** troubleshooting.html 18 Jun 2003 13:10:21 -0000 1.8
--- troubleshooting.html 18 Jun 2003 13:15:11 -0000 1.9
***************
*** 19,23 ****
There is also an online
! FAQ for SpamBayes which may have additional information of use.
From mhammond at users.sourceforge.net Wed Jun 18 07:29:48 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Wed Jun 18 09:29:51 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/dialogs
FolderSelector.py, 1.19, 1.20
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/dialogs
In directory sc8-pr-cvs1:/tmp/cvs-serv25020
Modified Files:
FolderSelector.py
Log Message:
Naughty naughty me.
Index: FolderSelector.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/dialogs/FolderSelector.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** FolderSelector.py 17 Jun 2003 04:16:39 -0000 1.19
--- FolderSelector.py 18 Jun 2003 13:29:46 -0000 1.20
***************
*** 89,93 ****
spec.children = None # Flag as "not yet built"
children.append(spec)
! except pythoncom.com_error, details
# Users have reported failure here - it is not clear if the
# entire tree is going to fail, or just this folder
--- 89,93 ----
spec.children = None # Flag as "not yet built"
children.append(spec)
! except pythoncom.com_error, details:
# Users have reported failure here - it is not clear if the
# entire tree is going to fail, or just this folder
From montanaro at users.sourceforge.net Wed Jun 18 09:09:01 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Wed Jun 18 11:09:05 2003
Subject: [Spambayes-checkins] spambayes/spambayes tokenizer.py,1.11,1.12
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv8764
Modified Files:
tokenizer.py
Log Message:
... is a Microsoft alternative for spelling
saw a message which used
Via6q5r7gra
to hide Viagra. The usual HTML tag stripping didn't remove the nonsense
token.
Index: tokenizer.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/tokenizer.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** tokenizer.py 20 May 2003 15:07:34 -0000 1.11
--- tokenizer.py 18 Jun 2003 15:08:59 -0000 1.12
***************
*** 1005,1010 ****
class CommentStripper(Stripper):
def __init__(self):
! Stripper.__init__(self, re.compile(r"").search)
crack_html_comment = CommentStripper().analyze
--- 1005,1011 ----
class CommentStripper(Stripper):
def __init__(self):
! Stripper.__init__(self,
! re.compile(r"|").search)
crack_html_comment = CommentStripper().analyze
From mhammond at users.sourceforge.net Thu Jun 19 17:47:42 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Thu Jun 19 19:47:46 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs configuration.html,
1.2, 1.3
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv18023/docs
Modified Files:
configuration.html
Log Message:
Add a 'verbose' option to the options. Formalize with a
LogDebug(level, val, ...) method, and add some extra debugging
logs for toolbars.
Index: configuration.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/configuration.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** configuration.html 18 Jun 2003 02:29:49 -0000 1.2
--- configuration.html 19 Jun 2003 23:47:40 -0000 1.3
***************
*** 166,169 ****
--- 166,184 ----
+
+
[Genera]
+
+
verbose
+
+
Number
+
+
0
+
+
The level of debug output
+ generated by the program. This output is written to the standard
+ log for the application - see the troubleshooting
+ guide for information on locating the log.
+
+
From mhammond at users.sourceforge.net Thu Jun 19 17:47:42 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Thu Jun 19 19:47:48 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 manager.py, 1.61,
1.62 addin.py, 1.64, 1.65 config.py, 1.12, 1.13
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv18023
Modified Files:
manager.py addin.py config.py
Log Message:
Add a 'verbose' option to the options. Formalize with a
LogDebug(level, val, ...) method, and add some extra debugging
logs for toolbars.
Index: manager.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/manager.py,v
retrieving revision 1.61
retrieving revision 1.62
diff -C2 -d -r1.61 -r1.62
*** manager.py 17 Jun 2003 04:07:43 -0000 1.61
--- manager.py 19 Jun 2003 23:47:40 -0000 1.62
***************
*** 238,241 ****
--- 238,247 ----
self.LoadBayes()
+ def LogDebug(self, level, *args):
+ if self.verbose >= level:
+ for arg in args[:-1]:
+ print arg,
+ print args[-1]
+
def ReportError(self, message, title = None):
ReportError(message, title)
***************
*** 361,367 ****
folder = msgstore_folder.GetOutlookItem()
! if self.verbose > 1:
! print "Checking folder '%s' for our field '%s'" \
! % (self.config.general.field_score_name,folder.Name.encode("mbcs", "replace"))
items = folder.Items
item = items.GetFirst()
--- 367,372 ----
folder = msgstore_folder.GetOutlookItem()
! self.LogDebug(2, "Checking folder '%s' for our field '%s'" \
! % (self.config.general.field_score_name,folder.Name.encode("mbcs", "replace")))
items = folder.Items
item = items.GetFirst()
***************
*** 390,395 ****
format)
item.Save()
! if self.verbose > 1:
! print "Created the UserProperty!"
except pythoncom.com_error, details:
print "Warning: failed to create the Outlook " \
--- 395,399 ----
format)
item.Save()
! self.LogDebug(2, "Created the UserProperty!")
except pythoncom.com_error, details:
print "Warning: failed to create the Outlook " \
***************
*** 431,436 ****
bayes = self.bayes
message_db = self.message_db
! if self.verbose:
! print ("Bayes database initialized with "
"%d spam and %d good messages" % (bayes.nspam, bayes.nham))
if len(message_db) != bayes.nham + bayes.nspam:
--- 435,439 ----
bayes = self.bayes
message_db = self.message_db
! self.LogDebug(0, "Bayes database initialized with "
"%d spam and %d good messages" % (bayes.nspam, bayes.nham))
if len(message_db) != bayes.nham + bayes.nspam:
***************
*** 440,445 ****
self.message_db = message_db
self.bayes_dirty = False
! if self.verbose:
! print "Loaded databases in %gms" % ((time.clock()-start)*1000)
def PrepareConfig(self):
--- 443,447 ----
self.message_db = message_db
self.bayes_dirty = False
! self.LogDebug(1, "Loaded databases in %gms" % ((time.clock()-start)*1000))
def PrepareConfig(self):
***************
*** 490,493 ****
--- 492,500 ----
# Now load it up
self._MergeConfigFile(self.config_filename)
+ # Set global verbosity from the options file.
+ self.verbose = self.config.general.verbose
+ if self.verbose:
+ self.LogDebug(self.verbose, "System verbosity set to", self.verbose)
+
self.MigrateOldPickle()
***************
*** 499,504 ****
f = open(pickle_filename, 'rb')
except IOError:
! if self.verbose:
! print "No old pickle file to migrate"
return
print "Migrating old pickle '%s'" % pickle_filename
--- 506,510 ----
f = open(pickle_filename, 'rb')
except IOError:
! self.LogDebug(1, "No old pickle file to migrate")
return
print "Migrating old pickle '%s'" % pickle_filename
***************
*** 533,542 ****
# migrate will fail. We save first, so failure here means next
# attempt should still find the pickle.
! if self.verbose:
! print "pickle migration doing initial configuration save"
! self.SaveConfig()
try:
! if self.verbose:
! print "pickle migration removing '%s'" % pickle_filename
os.remove(pickle_filename)
except os.error:
--- 539,545 ----
# migrate will fail. We save first, so failure here means next
# attempt should still find the pickle.
! self.LogDebug(1, "pickle migration doing initial configuration save")
try:
! self.LogDebug(1, "pickle migration removing '%s'" % pickle_filename)
os.remove(pickle_filename)
except os.error:
***************
*** 587,592 ****
self.db_manager.store_mdb(self.message_db)
self.bayes_dirty = False
! if self.verbose:
! print "Saved databases in %gms" % ((time.clock()-start)*1000)
def GetClassifier(self):
--- 590,594 ----
self.db_manager.store_mdb(self.message_db)
self.bayes_dirty = False
! self.LogDebug(1, "Saved databases in %gms" % ((time.clock()-start)*1000))
def GetClassifier(self):
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.64
retrieving revision 1.65
diff -C2 -d -r1.64 -r1.65
*** addin.py 18 Jun 2003 13:05:55 -0000 1.64
--- addin.py 19 Jun 2003 23:47:40 -0000 1.65
***************
*** 641,645 ****
# The Outlook event handlers
def OnActivate(self):
! #print "OnActivate", self
# See comments for OnNewExplorer below.
# *sigh* - OnActivate seems too early too for Outlook 2000,
--- 641,645 ----
# The Outlook event handlers
def OnActivate(self):
! self.manager.LogDebug(2, "OnActivate", self)
# See comments for OnNewExplorer below.
# *sigh* - OnActivate seems too early too for Outlook 2000,
***************
*** 651,655 ****
def OnSelectionChange(self):
! #print "OnSelChange", self
# See comments for OnNewExplorer below.
if not self.have_setup_ui:
--- 651,655 ----
def OnSelectionChange(self):
! self.manager.LogDebug(2, "OnSelectionChange", self)
# See comments for OnNewExplorer below.
if not self.have_setup_ui:
***************
*** 659,663 ****
def OnClose(self):
! #print "OnClose", self
self.explorers_collection._DoDeadExplorer(self)
self.explorers_collection = None
--- 659,663 ----
def OnClose(self):
! self.manager.LogDebug(2, "OnClose", self)
self.explorers_collection._DoDeadExplorer(self)
self.explorers_collection = None
***************
*** 665,670 ****
self.close() # disconnect events.
def OnFolderSwitch(self):
! #print "OnFolderSwitch", self
# Yet another worm-around for our event timing woes. This may
# be the first event ever seen for this explorer if, eg,
--- 665,673 ----
self.close() # disconnect events.
+ def OnBeforeFolderSwitch(self, new_folder, cancel):
+ self.manager.LogDebug(2, "OnBeforeFolderSwitch", self)
+
def OnFolderSwitch(self):
! self.manager.LogDebug(2, "OnFolderSwitch", self)
# Yet another worm-around for our event timing woes. This may
# be the first event ever seen for this explorer if, eg,
***************
*** 706,711 ****
self.but_delete_as.Visible = show_delete_as
def OnViewSwitch(self):
! #print "OnViewSwitch", self
if not self.have_setup_ui:
self.SetupUI()
--- 709,717 ----
self.but_delete_as.Visible = show_delete_as
+ def OnBeforeViewSwitch(self, new_view, cancel):
+ self.manager.LogDebug(2, "OnBeforeViewSwitch", self)
+
def OnViewSwitch(self):
! self.manager.LogDebug(2, "OnViewSwitch", self)
if not self.have_setup_ui:
self.SetupUI()
***************
*** 924,935 ****
--- 930,945 ----
def RegisterAddin(klass):
+ # prints to help debug binary install issues.
+ print "Starting register"
import _winreg
key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER,
"Software\\Microsoft\\Office\\Outlook\\Addins")
subkey = _winreg.CreateKey(key, klass._reg_progid_)
+ print "Setting values"
_winreg.SetValueEx(subkey, "CommandLineSafe", 0, _winreg.REG_DWORD, 0)
_winreg.SetValueEx(subkey, "LoadBehavior", 0, _winreg.REG_DWORD, 3)
_winreg.SetValueEx(subkey, "Description", 0, _winreg.REG_SZ, "SpamBayes anti-spam tool")
_winreg.SetValueEx(subkey, "FriendlyName", 0, _winreg.REG_SZ, "SpamBayes")
+ print "Registration complete."
def UnregisterAddin(klass):
Index: config.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/config.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** config.py 18 Jun 2003 02:29:49 -0000 1.12
--- config.py 19 Jun 2003 23:47:40 -0000 1.13
***************
*** 27,31 ****
from spambayes.OptionsClass import OptionsClass, Option
from spambayes.OptionsClass import RESTORE, DO_NOT_RESTORE
! from spambayes.OptionsClass import BOOLEAN, REAL, PATH
class FolderIDOption(Option):
--- 27,31 ----
from spambayes.OptionsClass import OptionsClass, Option
from spambayes.OptionsClass import RESTORE, DO_NOT_RESTORE
! from spambayes.OptionsClass import BOOLEAN, INTEGER, REAL, PATH
class FolderIDOption(Option):
***************
*** 101,104 ****
--- 101,107 ----
also be set.""",
MSG_READ_STATE, RESTORE),
+ ("verbose", "Changes the verbosity of the debug output from the program", 0,
+ """""",
+ INTEGER, RESTORE),
),
"Training" : (
From npickett at users.sourceforge.net Fri Jun 20 22:46:34 2003
From: npickett at users.sourceforge.net (Neale Pickett)
Date: Sat Jun 21 00:46:38 2003
Subject: [Spambayes-checkins] spambayes/spambayes hammiebulk.py,1.5,1.6
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv20020/spambayes
Modified Files:
hammiebulk.py
Log Message:
* Makes untrain mode work (thanks Paramjit Oberoi)
Index: hammiebulk.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/hammiebulk.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** hammiebulk.py 29 Jan 2003 03:23:34 -0000 1.5
--- hammiebulk.py 21 Jun 2003 04:46:32 -0000 1.6
***************
*** 143,147 ****
unknown = []
reverse = 0
! untrain = 0
do_filter = False
usedb = None
--- 143,147 ----
unknown = []
reverse = 0
! untrain_mode = 0
do_filter = False
usedb = None
***************
*** 167,171 ****
unknown.append(arg)
elif opt == '-U':
! untrain = 1
elif opt == '-r':
reverse = 1
--- 167,171 ----
unknown.append(arg)
elif opt == '-U':
! untrain_mode = 1
elif opt == '-r':
reverse = 1
***************
*** 180,184 ****
h = hammie.open(pck, usedb, mode)
! if not untrain:
for g in good:
print "Training ham (%s):" % g
--- 180,184 ----
h = hammie.open(pck, usedb, mode)
! if not untrain_mode:
for g in good:
print "Training ham (%s):" % g
From bwarsaw at users.sourceforge.net Sat Jun 21 11:06:05 2003
From: bwarsaw at users.sourceforge.net (Barry A. Warsaw)
Date: Sat Jun 21 13:06:11 2003
Subject: [Spambayes-checkins] spambayes INTEGRATION.txt,1.9,1.10
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv1610
Modified Files:
INTEGRATION.txt
Log Message:
Updated some requirements re: Python version and email package
version.
Index: INTEGRATION.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/INTEGRATION.txt,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** INTEGRATION.txt 6 Jun 2003 17:08:12 -0000 1.9
--- INTEGRATION.txt 21 Jun 2003 17:06:03 -0000 1.10
***************
*** 41,61 ****
------------
! As a general requirement, you must have a recent version of Python installed
! on your computer, version 2.2 or later. (Don't ask about backporting it to
! earlier versions of Python. It's almost a certainty this won't happen.) If
! you need to install Python on your system, check the Python download page
! for the version appropriate to your computer:
http://www.python.org/download/
! You also need version 2.4.3 or above of the Python "email" package. If
! you're running Python 2.3 (which at the time of writing is available
! from SourceForge CVS, or as the alpha version 2.3a1, available from
! python.org) then you already have this. If not, you can download
! it from http://mimelib.sf.net and install it - unpack the archive, cd to
! the email-2.4.3 directory and type "python setup.py install" (YMMV on
! different platforms). This will install it into your Python site-packages
! directory. You'll also need to move aside the standard "email" library -
! go to your Python "Lib" directory and rename "email" to "email_old".
--- 41,66 ----
------------
! As a general requirement, you must have a recent version of Python
! installed on your computer, version 2.2 or later. Python 2.2.3 is
! recommended. (Don't ask about backporting it to earlier versions of
! Python. It's almost a certainty this won't happen.) If you need to
! install Python on your system, check the Python download page for the
! version appropriate to your computer:
http://www.python.org/download/
! You also need version 2.4.3 or above of the Python "email" package.
! If you're running Python 2.2.3 or Python 2.3 (which at the time of
! writing is available from SourceForge CVS, or as the beta version
! 2.3b1, available from python.org) then you already have a good version
! of the email package.
!
! If not, you can download email version 2.5 (as of this writing) from
! http://mimelib.sf.net and install it - unpack the archive, cd to the
! email-2.5 directory and type "python setup.py install" (YMMV on
! different platforms). This will install it into your Python
! site-packages directory. You'll also need to move aside the standard
! "email" library - go to your Python "Lib" directory and rename "email"
! to "email_old".
From anadelonbrin at users.sourceforge.net Sat Jun 21 19:29:13 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Sat Jun 21 21:29:17 2003
Subject: [Spambayes-checkins] spambayes imapfilter.py,1.44,1.45
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv25637
Modified Files:
imapfilter.py
Log Message:
imap4rev1 does not include RFC822.PEEK as a fetch option.
The correct response to this is 'bad', but we are currently
checking for 'no' (which is what Courier gives).
Change to allow for this behaviour (still falling back on RFC822).
Index: imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/imapfilter.py,v
retrieving revision 1.44
retrieving revision 1.45
diff -C2 -d -r1.44 -r1.45
*** imapfilter.py 12 Jun 2003 07:25:03 -0000 1.44
--- imapfilter.py 22 Jun 2003 01:29:11 -0000 1.45
***************
*** 110,113 ****
--- 110,114 ----
from imaplib import Debug
+ from imaplib import error
from imaplib import Time2Internaldate
try:
***************
*** 320,324 ****
# the status of the message. Unfortunately, it appears that not
# all IMAP servers support this, even though it is in RFC1730
! response = imap.uid("FETCH", self.uid, self.rfc822_command)
if response[0] != "OK":
self.rfc822_command = "RFC822"
--- 321,329 ----
# the status of the message. Unfortunately, it appears that not
# all IMAP servers support this, even though it is in RFC1730
! try:
! response = imap.uid("FETCH", self.uid, self.rfc822_command)
! except error:
! self.rfc822_command = "RFC822"
! response = imap.uid("FETCH", self.uid, self.rfc822_command)
if response[0] != "OK":
self.rfc822_command = "RFC822"
From anadelonbrin at users.sourceforge.net Sat Jun 21 19:44:55 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Sat Jun 21 21:44:59 2003
Subject: [Spambayes-checkins] spambayes CHANGELOG.txt, 1.5,
1.6 WHAT_IS_NEW.txt, 1.4, 1.5
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv26905
Modified Files:
CHANGELOG.txt WHAT_IS_NEW.txt
Log Message:
Bring changelog and what's new up to date.
Index: CHANGELOG.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/CHANGELOG.txt,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** CHANGELOG.txt 12 Jun 2003 07:25:02 -0000 1.5
--- CHANGELOG.txt 22 Jun 2003 01:44:53 -0000 1.6
***************
*** 250,251 ****
--- 250,270 ----
Skip Montanaro 10/06/03 Correction to VM mailer addition to spambayes.el
Tony Meyer 12/06/03 Update pop3proxy and imapfilter to print out version information.
+ Mark Hammond 16/06/03 Split OptionsClass into a separate file.
+ Mark Hammond 16/06/03 Allow lists to be used for multi-valued options.
+ Mark Hammond 16/06/03 Allow the first entry in the "defaults" table to be a sub-class of Option.
+ Mark Hammond 16/06/03 In Outlook plugin, when training, instead of suggesting the inbox, suggest folders we watch.
+ Mark Hammond 16/06/03 In Outlook plugin, change "Anti-Spam" on the dropdown to "SpamBayes"
+ Mark Hammond 16/06/03 In Outlook plugin, huge changes to configuration. No longer use a pickle, but instead a series of .INI files.
+ Mark Hammond 17/06/03 2 new [General] options for Outlook plugin - delete_as_spam_message_state and recover_from_spam_message_state.
+ Mark Hammond 17/06/03 In Outlook plugin, prevent "Deleted items", Outbox and Sent Items from appearing in the folder list. Fixes: [ 749277 ] Should prevent "Deleted Items" being target folder.
+ Mark Hammond 17/06/03 In Outlook plugin, catch the assertion error in the classifier, and warn the user their database is corrupt.
+ Mark Hammond 17/06/03 In Outlook plugin, introduce ReportErrorOnce, useful for errors on event handlers that you don't want to bombard the user with.
+ Mark Hammond 17/06/03 In Outlook plugin, an error on a single sub-folder need not be fatal. Hopefully fixes [ 743515 ] Unable to expand folders in folder selection dialog.
+ Mark Hammond 17/06/03 In Outlook plugin, DeleteAsSpam didn't detect "no folder" correctly.
+ Anthony Baxter 17/06/03 In IMAPFilter interface, fix parm_map code.
+ Mark Hammond 18/06/03 In Outlook plugin, allow either spam or unsure messages to be marked as read as they are filtered.
+ Mark Hammond 18/06/03 In Outlook plugin, more work on the toolbar.
+ Mark Hammond 19/06/03 In Outlook plugin, change "Anti-Spam Manager" -> "SpamBayes Manager"
+ Mark Hammond 20/06/03 In Outlook plugin, add a 'verbose' option to the options.
+ Neale Pickett 21/06/03 In hammiefilter, make untrain mode work.
+ Tony Meyer 22/06/03 Fix RFC822.PEEK error in imapfilter.
Index: WHAT_IS_NEW.txt
===================================================================
RCS file: /cvsroot/spambayes/spambayes/WHAT_IS_NEW.txt,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** WHAT_IS_NEW.txt 12 Jun 2003 07:19:13 -0000 1.4
--- WHAT_IS_NEW.txt 22 Jun 2003 01:44:53 -0000 1.5
***************
*** 36,39 ****
--- 36,47 ----
o In Outlook plugin, when filtering, saving the spam score is no longer
fatal.
+ o 2 new [General] options - delete_as_spam_message_state and
+ recover_from_spam_message_state.
+ o Prevent "Deleted items", Outbox and Sent Items from appearing
+ in the folder list.
+ o Allow either spam or unsure messages to be marked as read as they are filtered.
+ o Significant improvements to the toolbar.
+ o Standardised name from "Anti-Spam" to "Spambayes"
+ o Significant changes to configuration (moving from a pickle to .ini files).
POP3 Proxy
***************
*** 105,108 ****
--- 113,117 ----
o In muttrc, fix incorrect Spambayes header name.
o Integrated code for the VM mailer into spambayes.el
+ o In hammiefilter, make untrain mode work.
***************
*** 136,140 ****
677804, 642740, 685746, 693423, 696995, 696476, 697120, 698852, 700165,
704921, 707491, 725307, 725616, 725307, 725466, 726255, 728886, 715248,
! 733247, 737956, 737955, 706170, 737986
A url containing the details of these bugs can be made by appending the
--- 145,149 ----
677804, 642740, 685746, 693423, 696995, 696476, 697120, 698852, 700165,
704921, 707491, 725307, 725616, 725307, 725466, 726255, 728886, 715248,
! 733247, 737956, 737955, 706170, 737986, 743515, 749277
A url containing the details of these bugs can be made by appending the
From anadelonbrin at users.sourceforge.net Sat Jun 21 20:00:46 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Sat Jun 21 22:00:50 2003
Subject: [Spambayes-checkins]
website applications.ht, 1.8, 1.9 developer.ht,
1.9, 1.10 download.ht, 1.6, 1.7 index.ht, 1.14, 1.15
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv28118
Modified Files:
applications.ht developer.ht download.ht index.ht
Log Message:
Update for a3 release information.
Index: applications.ht
===================================================================
RCS file: /cvsroot/spambayes/website/applications.ht,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** applications.ht 22 May 2003 02:32:54 -0000 1.8
--- applications.ht 22 Jun 2003 02:00:44 -0000 1.9
***************
*** 18,22 ****
If you are going to use a source code version, you will also need:
!
Python 2.2 or later (2.2.2 recommended)
Python's win32com
extensions (win32all-149 or later - currently ActivePython is not suitable)
--- 18,22 ----
If you are going to use a source code version, you will also need:
!
Python 2.2 or later (2.2.3 recommended)
Python's win32com
extensions (win32all-149 or later - currently ActivePython is not suitable)
***************
*** 45,49 ****
This project works with either Python 2.2.2, Python 2.3 (currently in beta),
or on the bleeding edge of python code,
available from CVS on
--- 6,10 ----
The third pre-release of version 1.0 of the SpamBayes project is available.
! Download version 1.0a3 from the sourceforge Files page as either a gzipped tarball or a zip file of the source files.
From bwarsaw at users.sourceforge.net Sat Jun 21 21:04:16 2003
From: bwarsaw at users.sourceforge.net (Barry A. Warsaw)
Date: Sat Jun 21 23:04:19 2003
Subject: [Spambayes-checkins] spambayes imapfilter.py,1.45,1.46
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv1175
Modified Files:
imapfilter.py
Log Message:
Fix an import and an except clause, since imaplib doesn't export a
module global `error'.
run(): Don't try to suck out the password from Options when -p is
used. The default value is an empty tuple, so the index 0 isn't
valid. No matter, that's why you supply the -p option after all.
Index: imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/imapfilter.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -d -r1.45 -r1.46
*** imapfilter.py 22 Jun 2003 01:29:11 -0000 1.45
--- imapfilter.py 22 Jun 2003 03:04:14 -0000 1.46
***************
*** 110,114 ****
from imaplib import Debug
! from imaplib import error
from imaplib import Time2Internaldate
try:
--- 110,114 ----
from imaplib import Debug
! from imaplib import IMAP4
from imaplib import Time2Internaldate
try:
***************
*** 323,327 ****
try:
response = imap.uid("FETCH", self.uid, self.rfc822_command)
! except error:
self.rfc822_command = "RFC822"
response = imap.uid("FETCH", self.uid, self.rfc822_command)
--- 323,327 ----
try:
response = imap.uid("FETCH", self.uid, self.rfc822_command)
! except IMAP4.error:
self.rfc822_command = "RFC822"
response = imap.uid("FETCH", self.uid, self.rfc822_command)
***************
*** 698,702 ****
server = options["imap", "server"][0]
username = options["imap", "username"][0]
! pwd = options["imap", "password"][0]
else:
if not launchUI:
--- 698,703 ----
server = options["imap", "server"][0]
username = options["imap", "username"][0]
! if not promptForPass:
! pwd = options["imap", "password"][0]
else:
if not launchUI:
From anadelonbrin at users.sourceforge.net Sun Jun 22 20:54:10 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Sun Jun 22 22:54:13 2003
Subject: [Spambayes-checkins] spambayes imapfilter.py,1.46,1.47
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv10715
Modified Files:
imapfilter.py
Log Message:
Fix the -i switch.
Implement SF#755098 ("IMAP Filter: progress indicator").
When verbose is true, imapfilter now prints a '.' for each message
whose headers are requested. This is replaced with a '*' if the body
is requested.
After classification/filtering, a summary of messages is printed (again,
if verbose is true).
Index: imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/imapfilter.py,v
retrieving revision 1.46
retrieving revision 1.47
diff -C2 -d -r1.46 -r1.47
*** imapfilter.py 22 Jun 2003 03:04:14 -0000 1.46
--- imapfilter.py 23 Jun 2003 02:54:07 -0000 1.47
***************
*** 109,113 ****
from spambayes.Version import get_version_string
- from imaplib import Debug
from imaplib import IMAP4
from imaplib import Time2Internaldate
--- 109,112 ----
***************
*** 186,190 ****
def __init__(self, server, port, debug=0, do_expunge=False):
- Debug = debug # this is a global in the imaplib module
try:
BaseIMAP.__init__(self, server, port)
--- 185,188 ----
***************
*** 196,199 ****
--- 194,198 ----
print "Invalid server or port, please check these settings."
sys.exit(-1)
+ self.debug = debug
# For efficiency, we remember which folder we are currently
# in, and only send a select command to the IMAP server if
***************
*** 346,349 ****
--- 345,350 ----
self[options["pop3proxy", "mailid_header_name"]] = self.id
self.got_substance = True
+ if options["globals", "verbose"]:
+ sys.stdout.write(chr(8) + "*")
def MoveTo(self, dest):
***************
*** 366,369 ****
--- 367,371 ----
response = imap.uid("FETCH", self.uid, "(FLAGS INTERNALDATE)")
self._check(response, 'fetch (flags internaldate)')
+ #print response
data = _extract_fetch_data(response[1][0])
if data.has_key("INTERNALDATE"):
***************
*** 489,493 ****
else:
msg.setId(mo.group(1))
!
return msg
--- 491,497 ----
else:
msg.setId(mo.group(1))
!
! if options["globals", "verbose"]:
! sys.stdout.write(".")
return msg
***************
*** 525,532 ****
num_trained += 1
msg.RememberTrained(isSpam)
-
return num_trained
def Filter(self, classifier, spamfolder, unsurefolder):
for msg in self:
if msg.GetClassification() is None:
--- 529,539 ----
num_trained += 1
msg.RememberTrained(isSpam)
return num_trained
def Filter(self, classifier, spamfolder, unsurefolder):
+ count = {}
+ count["ham"] = 0
+ count["spam"] = 0
+ count["unsure"] = 0
for msg in self:
if msg.GetClassification() is None:
***************
*** 540,552 ****
if cls == options["Hammie", "header_ham_string"]:
# we leave ham alone
! pass
elif cls == options["Hammie", "header_spam_string"]:
msg.MoveTo(spamfolder)
else:
msg.MoveTo(unsurefolder)
!
msg.Save()
-
class IMAPFilter(object):
def __init__(self, classifier):
--- 547,561 ----
if cls == options["Hammie", "header_ham_string"]:
# we leave ham alone
! count["ham"] += 1
elif cls == options["Hammie", "header_spam_string"]:
msg.MoveTo(spamfolder)
+ count["spam"] += 1
else:
msg.MoveTo(unsurefolder)
! count["unsure"] += 1
msg.Save()
+ return count
+
class IMAPFilter(object):
def __init__(self, classifier):
***************
*** 598,601 ****
--- 607,611 ----
if options["globals", "verbose"]:
t = time.time()
+ count = None
# Select the spam folder and unsure folder to make sure they exist
***************
*** 607,615 ****
imap.SelectFolder(filter_folder)
folder = IMAPFolder(filter_folder)
! folder.Filter(self.classifier, self.spam_folder,
self.unsure_folder)
if options["globals", "verbose"]:
! print "Filtering took", time.time() - t, "seconds."
--- 617,628 ----
imap.SelectFolder(filter_folder)
folder = IMAPFolder(filter_folder)
! count = folder.Filter(self.classifier, self.spam_folder,
self.unsure_folder)
if options["globals", "verbose"]:
! if count is not None:
! print "\nClassified %s ham, %s spam, and %s unsure." % \
! (count["ham"], count["spam"], count["unsure"])
! print "Classifying took", time.time() - t, "seconds."
From anadelonbrin at users.sourceforge.net Sun Jun 22 21:13:14 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Sun Jun 22 23:13:18 2003
Subject: [Spambayes-checkins] spambayes imapfilter.py,1.47,1.48
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv12678
Modified Files:
imapfilter.py
Log Message:
If appending fails, try without including the flags, letting the user know
that flag information will be lost.
This is a band-aid fix - it would be much better to try and establish
which flags cannot be appended.
Index: imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/imapfilter.py,v
retrieving revision 1.47
retrieving revision 1.48
diff -C2 -d -r1.47 -r1.48
*** imapfilter.py 23 Jun 2003 02:54:07 -0000 1.47
--- imapfilter.py 23 Jun 2003 03:13:12 -0000 1.48
***************
*** 39,49 ****
Warnings:
! o This is very alpha. The filter is currently being developed and
tested. We do *not* recommend using it on a production system unless
you are confident that you can get your mail back if you lose it. On
the other hand, we do recommend that you test it for us and let us
! know if anything does go wrong. Once this appears in a release,
! rather than just cvs, you can feel a *little* more confident
! about using it.
o By default, the filter does *not* delete, modify or move any of your
mail. Due to quirks in how imap works, new versions of your mail are
--- 39,47 ----
Warnings:
! o This is alpha software! The filter is currently being developed and
tested. We do *not* recommend using it on a production system unless
you are confident that you can get your mail back if you lose it. On
the other hand, we do recommend that you test it for us and let us
! know if anything does go wrong.
o By default, the filter does *not* delete, modify or move any of your
mail. Due to quirks in how imap works, new versions of your mail are
***************
*** 367,371 ****
response = imap.uid("FETCH", self.uid, "(FLAGS INTERNALDATE)")
self._check(response, 'fetch (flags internaldate)')
- #print response
data = _extract_fetch_data(response[1][0])
if data.has_key("INTERNALDATE"):
--- 365,368 ----
***************
*** 383,386 ****
--- 380,391 ----
response = imap.append(self.folder.name, flags,
msg_time, self.as_string())
+ if response[0] == "NO":
+ # This may be because we have tried to set an invalid flag.
+ # Try again, losing all the flag information, but warn the
+ # user that this has happened.
+ response = imap.append(self.folder.name, None, msg_time,
+ self.as_string())
+ if response[0] == "OK":
+ print "WARNING: Could not append flags: %s" % (flags,)
self._check(response, 'append')
From anadelonbrin at users.sourceforge.net Tue Jun 24 00:16:30 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Tue Jun 24 02:16:34 2003
Subject: [Spambayes-checkins] spambayes/spambayes Options.py,1.55,1.56
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv12942/spambayes
Modified Files:
Options.py
Log Message:
Implements sf#755095 IMAP Filter: move trained messages
Note that this is deliberately not exposed via the ui, as I'm not sure how confusing it will be. If lots of people ask for it, then it can be exposed.
Index: Options.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/Options.py,v
retrieving revision 1.55
retrieving revision 1.56
diff -C2 -d -r1.55 -r1.56
*** Options.py 16 Jun 2003 03:46:13 -0000 1.55
--- Options.py 24 Jun 2003 06:16:27 -0000 1.56
***************
*** 425,429 ****
("use_gary_combining", "Use gary-combining", False,
! """The combining scheme currently detailed on the Robinon web page.
The middle ground here is touchy, varying across corpus, and within
a corpus across amounts of training data. It almost never gives
--- 425,429 ----
("use_gary_combining", "Use gary-combining", False,
! """The combining scheme currently detailed on the Robinson web page.
The middle ground here is touchy, varying across corpus, and within
a corpus across amounts of training data. It almost never gives
***************
*** 871,874 ****
--- 871,900 ----
"""Comma delimited list of folders that will be examined for messages
to train as spam.""",
+ IMAP_FOLDER, DO_NOT_RESTORE),
+
+ ("move_trained_spam_to_folder", "Folder to move trained spam to", "",
+ """When training, all messages in the spam training folder(s) (above)
+ are examined - if they are new, they are used to train, if not, they
+ are ignored. This examination does take time, however, so if speed
+ is an issue for you, you may wish to move messages out of this folder
+ once they have been trained (either to delete them or to a storage
+ folder). If a folder name is specified here, this will happen
+ automatically. Note that the filter is not yet clever enough to
+ move the mail to different folders depending on which folder it
+ was originally in - *all* messages will be moved to the same
+ folder.""",
+ IMAP_FOLDER, DO_NOT_RESTORE),
+
+ ("move_trained_ham_to_folder", "Folder to move trained ham to", "",
+ """When training, all messages in the ham training folder(s) (above)
+ are examined - if they are new, they are used to train, if not, they
+ are ignored. This examination does take time, however, so if speed
+ is an issue for you, you may wish to move messages out of this folder
+ once they have been trained (either to delete them or to a storage
+ folder). If a folder name is specified here, this will happen
+ automatically. Note that the filter is not yet clever enough to
+ move the mail to different folders depending on which folder it
+ was originally in - *all* messages will be moved to the same
+ folder.""",
IMAP_FOLDER, DO_NOT_RESTORE),
),
From anadelonbrin at users.sourceforge.net Tue Jun 24 00:16:29 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Tue Jun 24 02:16:37 2003
Subject: [Spambayes-checkins] spambayes imapfilter.py,1.48,1.49
Message-ID:
Update of /cvsroot/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv12942
Modified Files:
imapfilter.py
Log Message:
Implements sf#755095 IMAP Filter: move trained messages
Note that this is deliberately not exposed via the ui, as I'm not sure how confusing it will be. If lots of people ask for it, then it can be exposed.
Index: imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/imapfilter.py,v
retrieving revision 1.48
retrieving revision 1.49
diff -C2 -d -r1.48 -r1.49
*** imapfilter.py 23 Jun 2003 03:13:12 -0000 1.48
--- imapfilter.py 24 Jun 2003 06:16:27 -0000 1.49
***************
*** 534,537 ****
--- 534,545 ----
num_trained += 1
msg.RememberTrained(isSpam)
+ if isSpam:
+ move_opt_name = "move_trained_spam_to_folder"
+ else:
+ move_opt_name = "move_trained_ham_to_folder"
+ if options["imap", move_opt_name] != "":
+ msg.MoveTo(IMAPFolder(options["imap",
+ move_opt_name]))
+ msg.Save()
return num_trained
From mhammond at users.sourceforge.net Tue Jun 24 18:44:20 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Tue Jun 24 20:44:25 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/docs
troubleshooting.html, 1.9, 1.10
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv6725
Modified Files:
troubleshooting.html
Log Message:
Add a missing TOC entry.
Index: troubleshooting.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/troubleshooting.html,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** troubleshooting.html 18 Jun 2003 13:15:11 -0000 1.9
--- troubleshooting.html 25 Jun 2003 00:44:17 -0000 1.10
***************
*** 13,16 ****
--- 13,18 ----
Alternatively, you can use CVS to get the code - go to the CVS page on the project's sourceforge site for more.
--- 34,39 ----
you might not. A new binary that solves this problem will be released soon
(it should be before the end of May), or alternatively you can use the CVS
! version, or alpha3 release.
There's also a vast number of clues and notes scattered as block comments through the code.
Index: windows.ht
===================================================================
RCS file: /cvsroot/spambayes/website/windows.ht,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** windows.ht 17 Jun 2003 13:47:53 -0000 1.17
--- windows.ht 26 Jun 2003 02:20:44 -0000 1.18
***************
*** 127,137 ****
href="applications.html#imap">IMAP) which corresponds to the way in
which you transfer mail from your mail server.
-
-
Notes
-
-
-
As of this writing, the last release (1.0a2) is getting rather
- long-in-the-tooth. You're probably better off either waiting for the next
- alpha release or downloading the code from the CVS repository.
-
\ No newline at end of file
--- 127,128 ----
From anadelonbrin at users.sourceforge.net Wed Jun 25 21:06:35 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Wed Jun 25 23:06:42 2003
Subject: [Spambayes-checkins] website faq.txt,1.5,1.6
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv1132
Modified Files:
faq.txt
Log Message:
Typo.
Index: faq.txt
===================================================================
RCS file: /cvsroot/spambayes/website/faq.txt,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** faq.txt 26 Jun 2003 03:01:07 -0000 1.5
--- faq.txt 26 Jun 2003 03:06:32 -0000 1.6
***************
*** 353,357 ****
or completely, or is being forced to shut down too quickly. This version
of the plug-in only saves training/configuration data on shut-down, so
! this can result in training/configuraton being lost. To get around this
problem, exit Outlook (not by restarting/shutting down the machine), and
make sure that it is completely shut down (use the Task Manager to check).
--- 353,357 ----
or completely, or is being forced to shut down too quickly. This version
of the plug-in only saves training/configuration data on shut-down, so
! this can result in training/configuration being lost. To get around this
problem, exit Outlook (not by restarting/shutting down the machine), and
make sure that it is completely shut down (use the Task Manager to check).
From tim_one at users.sourceforge.net Thu Jun 26 18:32:02 2003
From: tim_one at users.sourceforge.net (Tim Peters)
Date: Thu Jun 26 20:32:05 2003
Subject: [Spambayes-checkins] spambayes/spambayes storage.py,1.8,1.9
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv21052/spambayes
Modified Files:
storage.py
Log Message:
_wordinfoget(): If the word isn't in the cache, and it's also a
WORD_DELETED, honor the deletion by returning None. Before it was
trying to look word up in the Shelf even if it was marked deleted.
Index: storage.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/storage.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** storage.py 30 May 2003 03:06:55 -0000 1.8
--- storage.py 27 Jun 2003 00:31:59 -0000 1.9
***************
*** 213,221 ****
except KeyError:
ret = None
! r = self.db.get(word)
! if r:
! ret = self.WordInfoClass()
! ret.__setstate__(r)
! self.wordinfo[word] = ret
return ret
--- 213,222 ----
except KeyError:
ret = None
! if self.changed_words.get(word) is not WORD_DELETED:
! r = self.db.get(word)
! if r:
! ret = self.WordInfoClass()
! ret.__setstate__(r)
! self.wordinfo[word] = ret
return ret
From tim_one at users.sourceforge.net Thu Jun 26 18:38:58 2003
From: tim_one at users.sourceforge.net (Tim Peters)
Date: Thu Jun 26 20:39:01 2003
Subject: [Spambayes-checkins] spambayes/spambayes storage.py,1.9,1.10
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv21893/spambayes
Modified Files:
storage.py
Log Message:
_wordinfoset(): Removed what looks like a superstitious test that record
isn't None (although it wasn't explicitly checking for None, and it's
unclear what it was checking for).
Index: storage.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/storage.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** storage.py 27 Jun 2003 00:31:59 -0000 1.9
--- storage.py 27 Jun 2003 00:38:56 -0000 1.10
***************
*** 231,235 ****
# as much as 60%!!! This also has the effect of reducing the time it
# takes to store the database
! if record and (record.spamcount+record.hamcount <= 1):
self.db[word] = record.__getstate__()
# Remove this word from the changed list (not that it should be
--- 231,235 ----
# as much as 60%!!! This also has the effect of reducing the time it
# takes to store the database
! if record.spamcount + record.hamcount <= 1:
self.db[word] = record.__getstate__()
# Remove this word from the changed list (not that it should be
From tim_one at users.sourceforge.net Thu Jun 26 18:41:22 2003
From: tim_one at users.sourceforge.net (Tim Peters)
Date: Thu Jun 26 20:41:25 2003
Subject: [Spambayes-checkins] spambayes/spambayes storage.py,1.10,1.11
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv22075/spambayes
Modified Files:
storage.py
Log Message:
Assorted: Always compare against WORD_CHANGED and WORD_DELETED via "is"
instead of equality tests. These are singleton objects defined by the
module, so "is" is appropriate; "==" instead suggests that anyone can
reach into these data structures and plug in random strings instead, which
isn't the intent.
Index: storage.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/storage.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** storage.py 27 Jun 2003 00:38:56 -0000 1.10
--- storage.py 27 Jun 2003 00:41:20 -0000 1.11
***************
*** 186,193 ****
# For now, just do it the naive way.
for key, flag in self.changed_words.items():
! if flag == WORD_CHANGED:
val = self.wordinfo[key]
self.db[key] = val.__getstate__()
! elif flag == WORD_DELETED:
assert word not in self.wordinfo, \
"Should not have a wordinfo for words flagged for delete"
--- 186,193 ----
# For now, just do it the naive way.
for key, flag in self.changed_words.items():
! if flag is WORD_CHANGED:
val = self.wordinfo[key]
self.db[key] = val.__getstate__()
! elif flag is WORD_DELETED:
assert word not in self.wordinfo, \
"Should not have a wordinfo for words flagged for delete"
From tim_one at users.sourceforge.net Thu Jun 26 18:43:24 2003
From: tim_one at users.sourceforge.net (Tim Peters)
Date: Thu Jun 26 20:43:27 2003
Subject: [Spambayes-checkins] spambayes/spambayes storage.py,1.11,1.12
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv22388/spambayes
Modified Files:
storage.py
Log Message:
store(): Use iteritems() instead of items() to materialize the
changed_words guts; we're not mutating changed_words here, so there's
no need to materialize a possibly giant list of 2-tuples.
Index: storage.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/storage.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** storage.py 27 Jun 2003 00:41:20 -0000 1.11
--- storage.py 27 Jun 2003 00:43:22 -0000 1.12
***************
*** 185,189 ****
# lock while we copy and reset self.changed_words would be appropriate.
# For now, just do it the naive way.
! for key, flag in self.changed_words.items():
if flag is WORD_CHANGED:
val = self.wordinfo[key]
--- 185,189 ----
# lock while we copy and reset self.changed_words would be appropriate.
# For now, just do it the naive way.
! for key, flag in self.changed_words.iteritems():
if flag is WORD_CHANGED:
val = self.wordinfo[key]
From tim_one at users.sourceforge.net Thu Jun 26 18:45:23 2003
From: tim_one at users.sourceforge.net (Tim Peters)
Date: Thu Jun 26 20:45:26 2003
Subject: [Spambayes-checkins] spambayes/spambayes storage.py,1.12,1.13
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv22576/spambayes
Modified Files:
storage.py
Log Message:
store(): If a Shelf db doesn't have a key, then "del db[key]" should
raise KeyError.
Index: storage.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/storage.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** storage.py 27 Jun 2003 00:43:22 -0000 1.12
--- storage.py 27 Jun 2003 00:45:21 -0000 1.13
***************
*** 193,201 ****
"Should not have a wordinfo for words flagged for delete"
# Word may be deleted before it was ever written.
! # hrmph - working out what exceptions would be reasonable is
! # a PITA (but anydbm.errors may be useful) - but for now,
! # just check the key first.
! if self.db.has_key(key):
del self.db[key]
else:
raise RuntimeError, "Unknown flag value"
--- 193,200 ----
"Should not have a wordinfo for words flagged for delete"
# Word may be deleted before it was ever written.
! try:
del self.db[key]
+ except KeyError:
+ pass
else:
raise RuntimeError, "Unknown flag value"
From tim_one at users.sourceforge.net Fri Jun 27 19:51:59 2003
From: tim_one at users.sourceforge.net (Tim Peters)
Date: Fri Jun 27 21:52:02 2003
Subject: [Spambayes-checkins] spambayes/spambayes tokenizer.py,1.12,1.13
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv29852/spambayes
Modified Files:
tokenizer.py
Log Message:
A new stripper to squash yet another way of hiding content in HTML spam,
like
Ereywl55ctions
to hide Erections. I haven't seen this often yet, but (of course) it's
been effective so far.
Index: tokenizer.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/tokenizer.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** tokenizer.py 18 Jun 2003 15:08:59 -0000 1.12
--- tokenizer.py 28 Jun 2003 01:51:57 -0000 1.13
***************
*** 1011,1014 ****
--- 1011,1022 ----
crack_html_comment = CommentStripper().analyze
+ # Nuke stuff between tags.
+ class NoframesStripper(Stripper):
+ def __init__(self):
+ Stripper.__init__(self,
+ re.compile(r"<\s*noframes\s*>").search,
+ re.compile(r"").search)
+
+ crack_noframes = NoframesStripper().analyze
# Scan HTML for constructs often seen in viruses and worms.
***************
*** 1392,1396 ****
crack_urls,
crack_html_style,
! crack_html_comment):
text, tokens = cracker(text)
for t in tokens:
--- 1400,1405 ----
crack_urls,
crack_html_style,
! crack_html_comment,
! crack_noframes):
text, tokens = cracker(text)
for t in tokens:
From mhammond at users.sourceforge.net Sun Jun 29 19:06:24 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Sun Jun 29 21:06:28 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 manager.py,1.62,1.63
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv30698
Modified Files:
manager.py
Log Message:
Log the repr() of messages displayed in a dialog, as they often have
embedded \r\n chars - repr() keeps the whole thing to a single line.
Index: manager.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/manager.py,v
retrieving revision 1.62
retrieving revision 1.63
diff -C2 -d -r1.62 -r1.63
*** manager.py 19 Jun 2003 23:47:40 -0000 1.62
--- manager.py 30 Jun 2003 01:06:21 -0000 1.63
***************
*** 95,99 ****
def ReportError(message, title = None):
import traceback
! print "ERROR:", message
traceback.print_exc()
if title is None:
--- 95,99 ----
def ReportError(message, title = None):
import traceback
! print "ERROR:", repr(message)
traceback.print_exc()
if title is None:
***************
*** 267,271 ****
# We have reported the error, but for the sake of the log, we
# still want it logged there.
! print "ERROR:", message
traceback.print_exc()
--- 267,271 ----
# We have reported the error, but for the sake of the log, we
# still want it logged there.
! print "ERROR:", repr(message)
traceback.print_exc()
***************
*** 273,277 ****
if key is None: key = msg
# Always print the message and traceback.
! print "ERROR:", msg
traceback.print_exc()
if key in self.reported_error_map:
--- 273,277 ----
if key is None: key = msg
# Always print the message and traceback.
! print "ERROR:", repr(msg)
traceback.print_exc()
if key in self.reported_error_map:
From mhammond at users.sourceforge.net Mon Jun 30 04:37:34 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 06:37:37 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.65,1.66
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv1088
Modified Files:
addin.py
Log Message:
Don't (try to) do OnStartupComplete work if OnConnection failed.
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.65
retrieving revision 1.66
diff -C2 -d -r1.65 -r1.66
*** addin.py 19 Jun 2003 23:47:40 -0000 1.65
--- addin.py 30 Jun 2003 10:37:32 -0000 1.66
***************
*** 720,723 ****
--- 720,724 ----
class ExplorersEvent:
def Init(self, manager):
+ assert self.manager
self.manager = manager
self.explorers = []
***************
*** 918,928 ****
# Toolbar and other UI stuff must be setup once startup is complete.
explorers = self.application.Explorers
! # and Explorers events so we know when new explorers spring into life.
! self.explorers_events = WithEvents(explorers, ExplorersEvent)
! self.explorers_events.Init(self.manager)
! # And hook our UI elements to all existing explorers
! for i in range(explorers.Count):
! explorer = explorers.Item(i+1)
! self.explorers_events._DoNewExplorer(explorer)
def OnBeginShutdown(self, custom):
--- 919,930 ----
# Toolbar and other UI stuff must be setup once startup is complete.
explorers = self.application.Explorers
! if self.manager is not None: # If we successfully started up.
! # and Explorers events so we know when new explorers spring into life.
! self.explorers_events = WithEvents(explorers, ExplorersEvent)
! self.explorers_events.Init(self.manager)
! # And hook our UI elements to all existing explorers
! for i in range(explorers.Count):
! explorer = explorers.Item(i+1)
! self.explorers_events._DoNewExplorer(explorer)
def OnBeginShutdown(self, custom):
From mhammond at users.sourceforge.net Mon Jun 30 04:50:04 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 06:50:07 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.66,1.67
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv2818
Modified Files:
addin.py
Log Message:
Oops - typo
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.66
retrieving revision 1.67
diff -C2 -d -r1.66 -r1.67
*** addin.py 30 Jun 2003 10:37:32 -0000 1.66
--- addin.py 30 Jun 2003 10:50:02 -0000 1.67
***************
*** 720,724 ****
class ExplorersEvent:
def Init(self, manager):
! assert self.manager
self.manager = manager
self.explorers = []
--- 720,724 ----
class ExplorersEvent:
def Init(self, manager):
! assert manager
self.manager = manager
self.explorers = []
From mhammond at users.sourceforge.net Mon Jun 30 18:43:49 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 20:43:55 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.67,1.68
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv11173
Modified Files:
addin.py
Log Message:
Toolbar was not initialized when "Outlook Today" was the default view.
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.67
retrieving revision 1.68
diff -C2 -d -r1.67 -r1.68
*** addin.py 30 Jun 2003 10:50:02 -0000 1.67
--- addin.py 1 Jul 2003 00:43:47 -0000 1.68
***************
*** 14,17 ****
--- 14,19 ----
if sys.version_info >= (2, 3):
# sick off the new hex() warnings!
+ # todo - remove this - win32all has removed all these warnings
+ # (but we will wait some time for people to update)
warnings.filterwarnings("ignore", category=FutureWarning, append=1)
***************
*** 733,736 ****
--- 735,739 ----
explorer.Init(self.manager, self)
self.explorers.append(explorer)
+ return explorer
def _DoDeadExplorer(self, explorer):
***************
*** 926,930 ****
for i in range(explorers.Count):
explorer = explorers.Item(i+1)
! self.explorers_events._DoNewExplorer(explorer)
def OnBeginShutdown(self, custom):
--- 929,934 ----
for i in range(explorers.Count):
explorer = explorers.Item(i+1)
! explorer = self.explorers_events._DoNewExplorer(explorer)
! explorer.OnFolderSwitch()
def OnBeginShutdown(self, custom):
From anadelonbrin at users.sourceforge.net Mon Jun 30 18:50:13 2003
From: anadelonbrin at users.sourceforge.net (Tony Meyer)
Date: Mon Jun 30 20:50:15 2003
Subject: [Spambayes-checkins] website docs.ht, 1.14, 1.15 faq.txt, 1.6,
1.7 related.ht, 1.8, 1.9
Message-ID:
Update of /cvsroot/spambayes/website
In directory sc8-pr-cvs1:/tmp/cvs-serv11813
Modified Files:
docs.ht faq.txt related.ht
Log Message:
Add notes about InBoxer and SpamAtBay to related.html.
Add FAQ about white/black listing.
Add note to Outlook documentation to avoid confusion when
the online documentation is more advanced than the version
they are using.
Index: docs.ht
===================================================================
RCS file: /cvsroot/spambayes/website/docs.ht,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** docs.ht 26 Jun 2003 02:20:44 -0000 1.14
--- docs.ht 1 Jul 2003 00:50:11 -0000 1.15
***************
*** 10,14 ****
The Outlook plugin includes an "About" File, and a "Troubleshooting Guide" that can be accessed via the toolbar.
! (Note that the online documentaton is always for the latest source version, and so might not correspond exactly with the version you are using.
! Always start with the documentation that came with the version you installed.)
There's also a vast number of clues and notes scattered as block comments through the code.
Index: faq.txt
===================================================================
RCS file: /cvsroot/spambayes/website/faq.txt,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** faq.txt 26 Jun 2003 03:06:32 -0000 1.6
--- faq.txt 1 Jul 2003 00:50:11 -0000 1.7
***************
*** 714,717 ****
--- 714,735 ----
+ Why don't you add whitelisting/blacklisting to SpamBayes?
+ ---------------------------------------------------------
+
+ The main reason is that for the most part SpamBayes doesn't need it! As
+ long as you keep training on unsure or mis-classified mail, SpamBayes will
+ learn what you consider good mail without needing any specific lists. In
+ addition, tokens are generated from email addresses, so an automatic
+ 'whitelist' (of sorts) is generated, as is a similar blacklist.
+
+ These sorts of lists are problematic, because 'spoofing' (pretending you
+ are someone else) is reasonably simple, and also fairly common. So, more
+ often than not, they'll lead to incorrect results. However, there are some
+ commercial products based on SpamBayes that offer whitelisting - see the
+ `related page`_ for more information.
+
+ .. _related page: related.html
+
+
What do I need to do to update the FAQ?
---------------------------------------
Index: related.ht
===================================================================
RCS file: /cvsroot/spambayes/website/related.ht,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** related.ht 31 Jan 2003 12:17:29 -0000 1.8
--- related.ht 1 Jul 2003 00:50:11 -0000 1.9
***************
*** 17,20 ****
--- 17,27 ----
Spam Bully is a commercial spam filter that claims to use bayesian techniques.
+
Projects based on SpamBayes
+
These are some projects that are based on SpamBayes. Those that are commercial offer the same success in filtering mail, but in exchange for forking out some money, may be more user-friendly and offer more in the way of support.
+
+
SpamAtBay is a soon to be available commercial version of the SpamBayes addin for Outlook. SpamAtBay development is headed by Sean True, who wrote the first integration of Outlook and SpamBayes (later this was improved on - basically rewritten using the same idea - by Mark Hammond).
+ SpamAtBay has a more polished layout, documentation and some more consumer oriented features. Contact Sean True for more information.
+
InBoxer. This is a consumer-oriented release with a simple one-click install process, based on SpamAtBay (in turn, based on SpamBayes). Contact Roger Matys for more information.
+
From mhammond at users.sourceforge.net Mon Jun 30 18:58:30 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 20:58:33 2003
Subject: [Spambayes-checkins] spambayes/spambayes Version.py,1.3,1.4
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv12677
Modified Files:
Version.py
Log Message:
Time flies when you are having fun
Index: Version.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/Version.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Version.py 12 Jun 2003 07:19:14 -0000 1.3
--- Version.py 1 Jul 2003 00:58:28 -0000 1.4
***************
*** 22,26 ****
"BinaryVersion": 003,
"Description": "SpamBayes Outlook Addin Beta1",
! "Date": "June 2003",
"Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
"Full Description Binary":
--- 22,26 ----
"BinaryVersion": 003,
"Description": "SpamBayes Outlook Addin Beta1",
! "Date": "July 2003",
"Full Description": "%(Description)s, version %(Version)s (%(Date)s)",
"Full Description Binary":
From mhammond at users.sourceforge.net Mon Jun 30 19:13:34 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 21:13:37 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 about.html,1.13,1.14
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv14664
Modified Files:
about.html
Log Message:
Tell the users how to re-display this documentation.
Index: about.html
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/about.html,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** about.html 18 Jun 2003 13:10:20 -0000 1.13
--- about.html 1 Jul 2003 01:13:32 -0000 1.14
***************
*** 6,9 ****
--- 6,16 ----
SpamBayes Outlook Plugin
+ Thank you for trying the SpamBayes anti-spam Outlook addin. You
+ can view this documentation at any time by starting Outlook, selecting
+ the SpamBayes Manager option
+ from the new SpamBayes toolbar
+ you will see, and selecting the About
+ button.
+
This plugin provides a spam filter based on statistical analysis of
your personal mail. Unlike other spam detection systems,
From montanaro at users.sourceforge.net Mon Jun 30 19:19:53 2003
From: montanaro at users.sourceforge.net (Skip Montanaro)
Date: Mon Jun 30 21:19:56 2003
Subject: [Spambayes-checkins] spambayes/spambayes storage.py,1.13,1.14
Message-ID:
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1:/tmp/cvs-serv15492
Modified Files:
storage.py
Log Message:
Encode unicode objects as utf-8 before using as a key for DBDictClassifier
instances.
Index: storage.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/storage.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** storage.py 27 Jun 2003 00:45:21 -0000 1.13
--- storage.py 1 Jul 2003 01:19:51 -0000 1.14
***************
*** 208,211 ****
--- 208,213 ----
def _wordinfoget(self, word):
+ if isinstance(word, unicode):
+ word = word.encode("utf-8")
try:
return self.wordinfo[word]
***************
*** 230,233 ****
--- 232,237 ----
# as much as 60%!!! This also has the effect of reducing the time it
# takes to store the database
+ if isinstance(word, unicode):
+ word = word.encode("utf-8")
if record.spamcount + record.hamcount <= 1:
self.db[word] = record.__getstate__()
***************
*** 243,246 ****
--- 247,252 ----
def _wordinfodel(self, word):
+ if isinstance(word, unicode):
+ word = word.encode("utf-8")
del self.wordinfo[word]
self.changed_words[word] = WORD_DELETED
From mhammond at users.sourceforge.net Mon Jun 30 21:15:39 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 23:15:43 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.68,1.69
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv30303
Modified Files:
addin.py
Log Message:
Display a message for "Delete as Spam" or "Recover from Spam" when
SpamBayes is not enabled.
Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.68
retrieving revision 1.69
diff -C2 -d -r1.68 -r1.69
*** addin.py 1 Jul 2003 00:43:47 -0000 1.68
--- addin.py 1 Jul 2003 03:15:37 -0000 1.69
***************
*** 358,361 ****
--- 358,369 ----
if not msgstore_messages:
return
+ # If we are not yet enabled, tell the user.
+ # (This is better than disabling the button as a) the user may not
+ # understand why it is disabled, and b) as we would then need to check
+ # the button state as the manager dialog closes.
+ if not self.manager.config.filter.enabled:
+ self.manager.ReportError(
+ "You must enable SpamBayes before you can delete as spam")
+ return
win32ui.DoWaitCursor(1)
# Delete this item as spam.
***************
*** 413,416 ****
--- 421,432 ----
msgstore_messages = self.explorer.GetSelectedMessages(True)
if not msgstore_messages:
+ return
+ # If we are not yet enabled, tell the user.
+ # (This is better than disabling the button as a) the user may not
+ # understand why it is disabled, and b) as we would then need to check
+ # the button state as the manager dialog closes.
+ if not self.manager.config.filter.enabled:
+ self.manager.ReportError(
+ "You must enable SpamBayes before you can recover spam")
return
win32ui.DoWaitCursor(1)
From mhammond at users.sourceforge.net Mon Jun 30 21:16:34 2003
From: mhammond at users.sourceforge.net (Mark Hammond)
Date: Mon Jun 30 23:16:36 2003
Subject: [Spambayes-checkins] spambayes/Outlook2000/installer
spambayes_addin.spec, 1.4, 1.5
Message-ID:
Update of /cvsroot/spambayes/spambayes/Outlook2000/installer
In directory sc8-pr-cvs1:/tmp/cvs-serv30391
Modified Files:
spambayes_addin.spec
Log Message:
Version 3 of the binary.
Index: spambayes_addin.spec
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/installer/spambayes_addin.spec,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** spambayes_addin.spec 1 May 2003 10:55:05 -0000 1.4
--- spambayes_addin.spec 1 Jul 2003 03:16:32 -0000 1.5
***************
*** 28,36 ****
extras.append( ("default_bayes_customize.ini", join(PROJECT_ROOT, "default_bayes_customize.ini"), 'DATA') )
! excludes = ['timer', 'dde', 'win32help', 'spambayes.compatsets', 'pywin.dialogs']
! a = Analysis([INSTALLER_ROOT+'/support/_mountzlib.py',
! INSTALLER_ROOT+'/support/useUnicode.py',
! 'spambayes_addin.py'],
excludes = excludes,
pathex=[PROJECT_ROOT,os.path.join(PROJECT_ROOT, '..')])
--- 28,39 ----
extras.append( ("default_bayes_customize.ini", join(PROJECT_ROOT, "default_bayes_customize.ini"), 'DATA') )
! excludes = ['dde', 'win32help']
! mods = []
! mods += [INSTALLER_ROOT+'/support/_mountzlib.py']
! mods += [INSTALLER_ROOT+'/support/useUnicode.py']
! mods.append('spambayes_addin.py')
!
! a = Analysis(mods,
excludes = excludes,
pathex=[PROJECT_ROOT,os.path.join(PROJECT_ROOT, '..')])