[spambayes-dev] Proposal for Emacs script to save spam-nonspam messages for training purposes

Skip Montanaro skip at pobox.com
Mon Aug 25 15:23:42 EDT 2003

    Paul> Thank you for this script. However, it did not run properly in my
    Paul> case. The function "copy-to-spam" saves the current message into
    Paul> "~/tmp/newspam", then marks it for deletion, jumps to the next
    Paul> message and undeletes that message. In my case, the following
    Paul> modification of e.g.  copy-to-spam seems to work:

    Paul> (defun copy-to-spam ()
    Paul>   (interactive)
    Paul>   (let ((vm-move-after-deleting nil))
    Paul>        (vm-save-message (expand-file-name "~/mail/mboxes/newspam")))
    Paul>   (let ((vm-move-after-undeleting t)) (vm-undelete-message 1)))

Thanks for the feedback.  FWIW, I don't use those precise Emacs Lisp
incantations anymore.  I'm not too surprised they didn't work in all
situations.  VM is a fairly complex beast.

Here's what I do now.

    (defun train-as-spam ()
      (let ((vm-delete-after-saving nil))
        (vm-save-message (expand-file-name "~/tmp/newspam"))
        (vm-add-message-labels "trained" 1))
      (vm-pipe-message-to-command "hammiefilter.py -s >/dev/null" nil))

    (defun train-as-nonspam ()
      (let ((vm-delete-after-saving nil))
        (vm-save-message (expand-file-name "~/tmp/newham"))
        (vm-add-message-labels "trained" 1))
      (vm-pipe-message-to-command "hammiefilter.py -g >/dev/null" nil))

    (define-key vm-mode-map "ls" 'train-as-spam)
    (define-key vm-summary-mode-map "ls" 'train-as-spam)
    (define-key vm-mode-map "lh" 'train-as-nonspam)
    (define-key vm-summary-mode-map "lh" 'train-as-nonspam)

It changes two things.  One, it tries not to delete the message, so the
problem you encountered should be gone.  Two, it trains on the message.  I
don't think I've encountered any problems in this regard, though it's worth
noting that mail could be arriving at the same time as hammiefilter has the
database open for write.

I'll update the faq.


More information about the spambayes-dev mailing list