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:
      !
    1. Select View-> ! Toolbars-> ! Customize to display the toolbar options dialog
    2. Select the tab labelled Toolbars, --- 97,103 ----
    3. Try resetting the toolbars:
        !
      1. Select View-> Toolbars-> Customize to display the toolbar options dialog
      2. 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.

        Report a bug

        All SpamBayes bugs are maintained in \Documents and Settings\{username}\Local ! Settings\Temp for Windows 2000/XP.
        !
        ! Note that by default, in Windows 2000 and XP, Windows Explorer will not ! show the Local Settings ! directory, as it is hidden.  You can convince Windows Explorer to ! show this directory (and therefore allow you to see the Temp directory under it by doing ! either:
        !
          !
        • Select the folder \Documents ! and Settings\{username}.  This directory should be ! reflected in the Address Bar.  In the Address Bar, simply type at ! the end "\Local Settings" (thereby giving that full path name), and ! press Enter.  Explorer ! will then show this folder.
        • !
        ! or !
          !
        • Select Tools->Folder Options, ! select the View tab, and in ! the list, select Show hidden files ! and folders.  Select OK.  This folder will now be ! visible.  You may like to then reset this option back to the ! default value.
          !
        • !
        ! 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 there are ! errors, please
        report a bug.

        Report a bug

        All SpamBayes bugs are maintained in Update of /cvsroot/spambayes/spambayes In directory sc8-pr-cvs1:/tmp/cvs-serv28783 Modified Files: hammiecli.py Log Message: tweak docstring Index: hammiecli.py =================================================================== RCS file: /cvsroot/spambayes/spambayes/hammiecli.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** hammiecli.py 21 Nov 2002 04:36:21 -0000 1.3 --- hammiecli.py 3 Jun 2003 15:45:48 -0000 1.4 *************** *** 4,8 **** Just feed it your mail on stdin, and it spits out the same message ! with a new X-Hammie-Disposition header. """ --- 4,8 ---- Just feed it your mail on stdin, and it spits out the same message ! with the spambayes score in a new X-Spambayes-Disposition header. """ From mhammond at users.sourceforge.net Tue Jun 3 19:47:15 2003 From: mhammond at users.sourceforge.net (Mark Hammond) Date: Tue Jun 3 21:47:19 2003 Subject: [Spambayes-checkins] spambayes/Outlook2000 msgstore.py,1.44,1.45 Message-ID: Update of /cvsroot/spambayes/spambayes/Outlook2000 In directory sc8-pr-cvs1:/tmp/cvs-serv20925 Modified Files: msgstore.py Log Message: Get even more brutal with the message when the email package still barfs. Index: msgstore.py =================================================================== RCS file: /cvsroot/spambayes/spambayes/Outlook2000/msgstore.py,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** msgstore.py 20 May 2003 00:30:45 -0000 1.44 --- msgstore.py 4 Jun 2003 01:47:13 -0000 1.45 *************** *** 666,670 **** # structure, just the words it contains, so no harm and # much good in trying to suppress this error. ! msg = email.message_from_string(text + "\n\n") except: print "FAILED to create email.message from: ", `text` --- 666,687 ---- # structure, just the words it contains, so no harm and # much good in trying to suppress this error. ! try: ! msg = email.message_from_string(text + "\n\n") ! except email.Errors.BoundaryError: ! # But even this doesn't get *everything*. We can still see: ! # "multipart message with no defined boundary" ! # so now it is time to turn into a butcher - hack out ! # the Content-Type header, so we see it as plain text. ! butcher_pos = text.lower().find("\ncontent-type: ") ! if butcher_pos < 0: ! # This error just just gunna get caught below anyway ! raise RuntimeError( ! "email package croaked with boundary error, but " ! "there appears to be no 'Content-Type' header") ! # Put it back together, skipping the original "\n" but ! # leaving the header leaving "\nSpamBayes-Content-Type: " ! butchered = text[:butcher_pos] + "\nSpamBayes-" + \ ! text[butcher_pos+1:] + "\n\n" ! msg = email.message_from_string(butchered) except: print "FAILED to create email.message from: ", `text` From mhammond at users.sourceforge.net Tue Jun 3 20:45:18 2003 From: mhammond at users.sourceforge.net (Mark Hammond) Date: Tue Jun 3 22:45:23 2003 Subject: [Spambayes-checkins] spambayes/Outlook2000 addin.py,1.57,1.58 Message-ID: Update of /cvsroot/spambayes/spambayes/Outlook2000 In directory sc8-pr-cvs1:/tmp/cvs-serv2893 Modified Files: addin.py Log Message: Change the way we use toolbars - create our own, and add our items to that. Seems to work fine for me. You may need to reset your standard toolbar if the old items are there. Attempts were made to save the database when classifying - although the save didn't happen (not dirty) is was an error. Log refers to "SpamBayes" rather than "SpamAddin" Wait cursor when incremental training (as it now includes the save, and with many message selected, takes a long time anyway) Index: addin.py =================================================================== RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** addin.py 16 May 2003 03:50:56 -0000 1.57 --- addin.py 4 Jun 2003 02:45:14 -0000 1.58 *************** *** 22,28 **** --- 22,31 ---- import pythoncom from win32com.client import constants, getevents + import win32ui import win32gui, win32con, win32clipboard # for button images! + toolbar_name = "SpamBayes" + # If we are not running in a console, redirect all print statements to the # win32traceutil collector. *************** *** 237,242 **** print "already was trained as spam" assert train.been_trained_as_spam(msgstore_message, self.manager) ! # And if the DB can save itself incrementally, do it now ! self.manager.SaveBayesPostIncrementalTrain() # Event function fired from the "Show Clues" UI items. --- 240,245 ---- print "already was trained as spam" assert train.been_trained_as_spam(msgstore_message, self.manager) ! # And if the DB can save itself incrementally, do it now ! self.manager.SaveBayesPostIncrementalTrain() # Event function fired from the "Show Clues" UI items. *************** *** 348,351 **** --- 351,355 ---- if not msgstore_messages: return + win32ui.DoWaitCursor(1) # Delete this item as spam. spam_folder_id = self.manager.config.filter.spam_folder_id *************** *** 359,363 **** # Must train before moving, else we lose the message! subject = msgstore_message.GetSubject() ! print "Deleting and spam training message '%s' - " % (subject,), if train.train_message(msgstore_message, True, self.manager, rescore = True): print "trained as spam" --- 363,367 ---- # Must train before moving, else we lose the message! subject = msgstore_message.GetSubject() ! print "Moving and spam training message '%s' - " % (subject,), if train.train_message(msgstore_message, True, self.manager, rescore = True): print "trained as spam" *************** *** 370,373 **** --- 374,378 ---- # And if the DB can save itself incrementally, do it now self.manager.SaveBayesPostIncrementalTrain() + win32ui.DoWaitCursor(0) class ButtonRecoverFromSpamEvent(ButtonDeleteAsEventBase): *************** *** 388,391 **** --- 393,397 ---- if not msgstore_messages: return + win32ui.DoWaitCursor(1) # Get the inbox as the default place to restore to # (incase we dont know (early code) or folder removed etc *************** *** 417,420 **** --- 423,427 ---- # And if the DB can save itself incrementally, do it now self.manager.SaveBayesPostIncrementalTrain() + win32ui.DoWaitCursor(0) # Helpers to work with images on buttons/toolbars. *************** *** 445,448 **** --- 452,456 ---- self.have_setup_ui = False self.explorer_list = explorer_list + self.toolbar = None self.buttons = [] *************** *** 451,474 **** self.buttons = [] activeExplorer = self ! bars = activeExplorer.CommandBars ! toolbar = bars.Item("Standard") # Add our "Delete as ..." and "Recover as" buttons self.but_delete_as = self._AddControl( ! toolbar, constants.msoControlButton, ButtonDeleteAsSpamEvent, (self.manager, self), ! BeginGroup = True, ! Tag = "SpamBayes.DeleteAsSpam") # And again for "Recover as" self.but_recover_as = self._AddControl( ! toolbar, constants.msoControlButton, ButtonRecoverFromSpamEvent, (self.manager, self), ! Tag = "SpamBayes.RecoverFromSpam") # The main tool-bar dropdown with all our entries. # Add a pop-up menu to the toolbar popup = self._AddControl( ! toolbar, constants.msoControlPopup, None, None, --- 459,481 ---- self.buttons = [] activeExplorer = self ! assert self.toolbar is None, "Should not yet have a toolbar" # Add our "Delete as ..." and "Recover as" buttons self.but_delete_as = self._AddControl( ! None, constants.msoControlButton, ButtonDeleteAsSpamEvent, (self.manager, self), ! BeginGroup = False, ! Tag = "SpamBayesCommand.DeleteAsSpam") # And again for "Recover as" self.but_recover_as = self._AddControl( ! None, constants.msoControlButton, ButtonRecoverFromSpamEvent, (self.manager, self), ! Tag = "SpamBayesCommand.RecoverFromSpam") # The main tool-bar dropdown with all our entries. # Add a pop-up menu to the toolbar popup = self._AddControl( ! None, constants.msoControlPopup, None, None, *************** *** 476,480 **** TooltipText = "Anti-Spam filters and functions", Enabled = True, ! Tag = "SpamBayes.Popup") # Convert from "CommandBarItem" to derived # "CommandBarPopup" Not sure if we should be able to work --- 483,487 ---- TooltipText = "Anti-Spam filters and functions", Enabled = True, ! Tag = "SpamBayesCommand.Popup") # Convert from "CommandBarItem" to derived # "CommandBarPopup" Not sure if we should be able to work *************** *** 490,494 **** TooltipText = "Show the Anti-Spam manager dialog.", Enabled = True, ! Tag = "SpamBayes.Manager") self._AddControl(popup, constants.msoControlButton, --- 497,502 ---- TooltipText = "Show the Anti-Spam manager dialog.", Enabled = True, ! Visible=True, ! Tag = "SpamBayesCommand.Manager") self._AddControl(popup, constants.msoControlButton, *************** *** 496,500 **** Caption="Show spam clues for current message", Enabled=True, ! Tag = "SpamBayes.Clues") # If we are running from Python sources, enable a few extra items if not hasattr(sys, "frozen"): --- 504,509 ---- 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"): *************** *** 504,508 **** Caption="Execute test suite", Enabled=True, ! Tag = "SpamBayes.TestSuite") self.have_setup_ui = True --- 513,518 ---- Caption="Execute test suite", Enabled=True, ! Visible=True, ! Tag = "SpamBayesCommand.TestSuite") self.have_setup_ui = True *************** *** 512,537 **** events_class, events_init_args, # class/Init() args **item_attrs): # extra control attributes. ! # Sigh - sometimes our toolbar etc items will become ! # permanent, even though we make them temporary. ! # I found # http://groups.google.com/groups?threadm=eKKmbvQvAHA.1808%40tkmsftngp02 ! # Maybe we should consider making them permanent - this would then ! # allow the user to drag them around the toolbars and have them ! # stick. The downside is that should the user uninstall this addin ! # there is no clean way to remove the buttons. Do we even care? assert item_attrs.has_key('Tag'), "Need a 'Tag' attribute!" - # Note we search *all* command bars here for the tag, only - # adding to the specified bar if not found. item = self.CommandBars.FindControl( Type = control_type, Tag = item_attrs['Tag']) if item is None: ! item = parent.Controls.Add(Type=control_type, Temporary=True) # Hook events for the item if events_class is not None: item = DispatchWithEvents(item, events_class) item.Init(*events_init_args) for attr, val in item_attrs.items(): setattr(item, attr, val) self.buttons.append(item) return item --- 522,576 ---- events_class, events_init_args, # class/Init() args **item_attrs): # extra control attributes. ! # Outlook Toolbars suck :) ! # We have tried a number of options: temp/perm in the standard toolbar, ! # Always creating our own toolbar, etc. ! # This seems to be fairly common: # http://groups.google.com/groups?threadm=eKKmbvQvAHA.1808%40tkmsftngp02 ! # Now the strategy is just to use our own, permanent toolbar, with ! # permanent items, and ignore uninstall issues. ! # We search all commandbars for a control with our Tag. If found, we ! # use it (the user may have customized the bar and moved our buttons ! # elsewhere). If we can not find the child control, we then try and ! # locate our toolbar, creating if necessary. Our items get added to ! # 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: ! # No parent specified - that means top-level - locate the ! # toolbar to use as the parent. ! if self.toolbar is None: ! # See if we can find our "SpamBayes" toolbar ! # Indexing via the name appears unreliable, so just loop ! # Pity we have no "Tag" on a toolbar - then we could even ! # handle being renamed by the user. ! bars = self.CommandBars ! for i in range(bars.Count): ! toolbar = bars.Item(i+1) ! if toolbar.Name == "SpamBayes": ! self.toolbar = toolbar ! print "Found SB toolbar - visible state is", toolbar.Visible ! break ! else: ! # 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 *************** *** 579,582 **** --- 618,622 ---- if closer is not None: closer() + self.toolbar = None self.buttons = [] self.close() # disconnect events. *************** *** 665,669 **** # automatically disabled by Outlook. # Our error reporter is in the "manager" module, so we get that first ! print "SpamAddin - Connecting to Outlook" import manager try: --- 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: *************** *** 767,775 **** def OnDisconnection(self, mode, custom): ! print "SpamAddin - Disconnecting from Outlook" self.folder_hooks = None self.application = None self.explorers_events = None if self.manager is not None: self.manager.Save() stats = self.manager.stats --- 807,819 ---- def OnDisconnection(self, mode, custom): ! print "SpamBayes - Disconnecting from Outlook" self.folder_hooks = None self.application = None self.explorers_events = None if self.manager is not None: + # Save database - bsddb databases will generally do nothing here + # as it will not be dirty, but pickles will. + # config never needs saving as it is always done by whoever changes + # it (ie, the dialog) self.manager.Save() stats = self.manager.stats From mhammond at users.sourceforge.net Tue Jun 3 20:46:50 2003 From: mhammond at users.sourceforge.net (Mark Hammond) Date: Tue Jun 3 22:46:53 2003 Subject: [Spambayes-checkins] spambayes/Outlook2000 manager.py,1.58,1.59 Message-ID: Update of /cvsroot/spambayes/spambayes/Outlook2000 In directory sc8-pr-cvs1:/tmp/cvs-serv3588 Modified Files: manager.py Log Message: Don't save the config as part of a general "manager.Save()" - config is now saved explicitly after the dialog closes, and this prevents us writing the config pickle at shutdown and various other times. Index: manager.py =================================================================== RCS file: /cvsroot/spambayes/spambayes/Outlook2000/manager.py,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** manager.py 16 May 2003 03:50:56 -0000 1.58 --- manager.py 4 Jun 2003 02:46:47 -0000 1.59 *************** *** 485,492 **** self.config._dump() print " ->", self.config_filename SavePickle(self.config, self.config_filename) def Save(self): ! self.SaveConfig() if self.bayes_dirty: self.SaveBayes() --- 485,495 ---- self.config._dump() print " ->", self.config_filename + assert self.config, "Have no config to save!" SavePickle(self.config, self.config_filename) def Save(self): ! # No longer save the config here - do it explicitly when changing it ! # (prevents lots of extra pickle writes, for no good reason. Other ! # alternative is a dirty flag for config - this is simpler) if self.bayes_dirty: self.SaveBayes() From mhammond at users.sourceforge.net Tue Jun 3 20:49:13 2003 From: mhammond at users.sourceforge.net (Mark Hammond) Date: Tue Jun 3 22:49:16 2003 Subject: [Spambayes-checkins] spambayes/Outlook2000/images delete_as_spam.bmp, 1.1, 1.2 recover_ham.bmp, 1.1, 1.2 Message-ID: Update of /cvsroot/spambayes/spambayes/Outlook2000/images In directory sc8-pr-cvs1:/tmp/cvs-serv3882 Modified Files: delete_as_spam.bmp recover_ham.bmp Log Message: Toolbar icons cleaned up (contributed, but I deleted their mail :( Index: delete_as_spam.bmp =================================================================== RCS file: /cvsroot/spambayes/spambayes/Outlook2000/images/delete_as_spam.bmp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvss02VHj and /tmp/cvsa4BV7s differ Index: recover_ham.bmp =================================================================== RCS file: /cvsroot/spambayes/spambayes/Outlook2000/images/recover_ham.bmp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvs35mRcq and /tmp/cvsCjY34F differ From mhammond at users.sourceforge.net Tue Jun 3 20:56:01 2003 From: mhammond at users.sourceforge.net (Mark Hammond) Date: Tue Jun 3 22:56:04 2003 Subject: [Spambayes-checkins] spambayes/Outlook2000/docs troubleshooting.html, 1.6, 1.7 Message-ID: Update of /cvsroot/spambayes/spambayes/Outlook2000/docs In directory sc8-pr-cvs1:/tmp/cvs-serv6140 Modified Files: troubleshooting.html Log Message: Reflect changes to the toolbars. Index: troubleshooting.html =================================================================== RCS file: /cvsroot/spambayes/spambayes/Outlook2000/docs/troubleshooting.html,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** troubleshooting.html 3 Jun 2003 13:49:51 -0000 1.6 --- troubleshooting.html 4 Jun 2003 02:55:59 -0000 1.7 *************** *** 31,36 **** toolbar items.  Follow this procedure to restore the toolbar.  If there is an error in the log file, ! please report a bug.  If no log file for this session exists, continue the following steps.
      3. --- 31,35 ---- toolbar items.  Follow this procedure to restore the toolbar.  If there is an error in the log file, ! please report a bug.  If no log file for this session exists, continue the following steps. *************** *** 92,97 **** following:. 
          !
        • 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
    4. !
    5. Restart Outlook
      !
    6. Messages fail to filter

      --- 104,130 ---- select the 'Standard' toolbar, and click Reset +
    7. Restart Outlook
  • !
  • Try deleting the SpamBayes toolbar
  • !
      !
    1. Select View-> Toolbars-> Customize to display ! the toolbar options dialog
    2. !
    3. Select the tab labelled Toolbars, ! select the 'SpamBayes' toolbar, ! and click Delete
    4. !
    5. Restart Outlook
      !
    6. !
    ! ! 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 ****
    1. 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.
    2. Create Spam and Usure folders
      --- 103,113 ----
      1. 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.
      2. Create Spam and Usure folders
        *************** *** 170,189 ****
      3. 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.
      4. In the drop-down list at the top of the Field Chooser window, select User Defined Fields
      5. !
      6. 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.

        !

        Ensure that the servers line looks like: !

        ! pop3proxy_servers: pop.videotron.ca:110,mail.ulaval.ca:110
        ! 
        ! And that the ports line looks like: !
        ! pop3proxy_ports: 110, 6111
        ! 
        !

        Configuring Entourage

        !

        !

          !
        • Go to the Tools menu and choose Accounts.
        • !
        • Click on New and choose POP.
        • !
        • 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: + +

        +
      1. 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).
      2. + +
      3. Mark Hammond's win32all + extensions. Choose the version which corresponds to the version of + Python you downloaded.
      4. + +
      5. 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).
      6. +
      +

      + +

      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.
    3. + 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:

          *************** *** 135,139 **** completely blank spam score.  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.

    Addin doesn't load

    --- 19,26 ---- There is also an online ! FAQ for SpamBayes which may have additional information of ! use.  You may also wish to see the latest ! online version of this document for problems added since release.

    Addin doesn't load

    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 ****

        Requirements

          !
        • Python 2.2 or later (2.2.2 recommended)
        • Currently documentation focuses on Unix.
        --- 45,49 ----

        Requirements

          !
        • Python 2.2 or later (2.2.3 recommended)
        • Currently documentation focuses on Unix.
        *************** *** 59,63 ****

        Requirements

          !
        • Python2.2 or later (2.2.2 recommended)
        • Should work on windows/unix/whatever...
        --- 59,63 ----

        Requirements

          !
        • Python2.2 or later (2.2.3 recommended)
        • Should work on windows/unix/whatever...
        *************** *** 76,80 ****

        Requirements

          !
        • Python2.2 or later (2.2.2 recommended)
        • Should work on windows/unix/whatever... ?
        --- 76,80 ----

        Requirements

          !
        • Python2.2 or later (2.2.3 recommended)
        • Should work on windows/unix/whatever... ?
        *************** *** 92,96 ****

        Requirements

          !
        • Python2.2 or later (2.2.2 recommended)
        • The code is currently Unix-specific.
        --- 92,96 ----

        Requirements

          !
        • Python2.2 or later (2.2.3 recommended)
        • The code is currently Unix-specific.
        Index: developer.ht =================================================================== RCS file: /cvsroot/spambayes/website/developer.ht,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** developer.ht 22 May 2003 02:10:13 -0000 1.9 --- developer.ht 22 Jun 2003 02:00:44 -0000 1.10 *************** *** 6,10 ****

        So you want to get involved?

        Running the code

        !

        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 ----

        So you want to get involved?

        Running the code

        !

        This project works with either Python 2.2.3, Python 2.3 (currently in beta), or on the bleeding edge of python code, available from CVS on Index: download.ht =================================================================== RCS file: /cvsroot/spambayes/website/download.ht,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** download.ht 22 May 2003 17:19:36 -0000 1.6 --- download.ht 22 Jun 2003 02:00:44 -0000 1.7 *************** *** 10,15 ****

        Source Releases

        !

        The second pre-release of version 1.0 of the SpamBayes project is available. ! Download version 1.0a2 from the sourceforge Files page as either a gzipped tarball or a zip file of the source files.

        --- 10,15 ----

        Source Releases

        !

        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.

        Index: index.ht =================================================================== RCS file: /cvsroot/spambayes/website/index.ht,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** index.ht 28 May 2003 01:21:58 -0000 1.14 --- index.ht 22 Jun 2003 02:00:44 -0000 1.15 *************** *** 5,13 ****

        News

        Spambayes (in particular the Outlook plugin) was recently featured in an InfoWorld article, and Jon Udell's blog.

        -

        Second pre-release available. See the download page for more.

        What is SpamBayes?

        --- 5,13 ----

        News

        +

        Third pre-release available. See the download page for more.

        Spambayes (in particular the Outlook plugin) was recently featured in an InfoWorld article, and Jon Udell's blog.

        What is SpamBayes?

        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 ----

        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

        - -
          -
        1. 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.
        2. -
        \ 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 ****
      • A rudimentary set of Frequently Asked Questions (FAQ).
      • Instructions on integrating Spambayes into your mail system.
      • !
      • The Outlook plugin includes an "About" File, and a "Troubleshooting Guide" that can be accessed via the toolbar.
      • There's also a vast number of clues and notes scattered as block comments through the code.
      --- 10,16 ----
    • A rudimentary set of Frequently Asked Questions (FAQ).
    • Instructions on integrating Spambayes into your mail system.
    • !
    • 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, '..')])