;;; spam-report.el --- Reporting spam
-;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
;; Author: Teodor Zlatanov <tzz@lifelogs.com>
;; Keywords: network
(defcustom spam-report-gmane-regex nil
"Regexp matching Gmane newsgroups, e.g. \"^nntp\\+.*:gmane\\.\"
-If you are using spam.el, consider setting gnus-spam-process-newsgroups
-or the gnus-group-spam-exit-processor-report-gmane group/topic parameter
+If you are using spam.el, consider setting gnus-spam-process-newsgroups
+or the gnus-group-spam-exit-processor-report-gmane group/topic parameter
instead."
:type '(radio (const nil)
(regexp :format "%t: %v\n" :size 0 :value "^nntp\+.*:gmane\."))
:group 'spam-report)
-(defcustom spam-report-gmane-spam-header
+(defcustom spam-report-gmane-spam-header
"^X-Report-Spam: http://\\([^/]+\\)\\(.*\\)$"
"String matching Gmane spam-reporting header. Two match groups are needed."
:type 'regexp
'spam-report-url-ping-plain
"Function to use for url ping spam reporting."
:type '(choice
- (const :tag "Connect directly"
+ (const :tag "Connect directly"
spam-report-url-ping-plain)
- (const :tag "Use the external program specified in `mm-url-program'"
+ (const :tag "Use the external program specified in `mm-url-program'"
spam-report-url-ping-mm-url))
:group 'spam-report)
-(defun spam-report-gmane (article)
+(defun spam-report-gmane (&rest articles)
"Report an article as spam through Gmane"
- (interactive "nEnter the article number: ")
- (when (and gnus-newsgroup-name
- (or (null spam-report-gmane-regex)
- (string-match spam-report-gmane-regex gnus-newsgroup-name)))
- (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article)
+ (dolist (article articles)
+ (when (and gnus-newsgroup-name
+ (or (null spam-report-gmane-regex)
+ (string-match spam-report-gmane-regex gnus-newsgroup-name)))
+ (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article)
(if spam-report-gmane-use-article-number
- (spam-report-url-ping "spam.gmane.org"
- (format "/%s:%d"
- (gnus-group-real-name gnus-newsgroup-name)
- article))
+ (spam-report-url-ping "spam.gmane.org"
+ (format "/%s:%d"
+ (gnus-group-real-name gnus-newsgroup-name)
+ article))
(with-current-buffer nntp-server-buffer
(gnus-request-head article gnus-newsgroup-name)
(goto-char (point-min))
(let* ((host (match-string 1))
(report (match-string 2))
(url (format "http://%s%s" host report)))
- (gnus-message 10 "Reporting spam through URL %s..." url)
+ (gnus-message 7 "Reporting spam through URL %s..." url)
(spam-report-url-ping host report))
- (gnus-message 10 "Could not find X-Report-Spam in article %d..."
- article))))))
+ (gnus-message 3 "Could not find X-Report-Spam in article %d..."
+ article)))))))
(defun spam-report-url-ping (host report)
"Ping a host through HTTP, addressing a specific GET resource using
(let ((tcp-connection))
(with-temp-buffer
(or (setq tcp-connection
- (open-network-stream
+ (open-network-stream
"URL ping"
(buffer-name)
host
80))
(error "Could not open connection to %s" host))
(set-marker (process-mark tcp-connection) (point-min))
- (process-send-string tcp-connection
- (format "GET %s HTTP/1.1\nHost: %s\n\n"
- report host)))))
+ (process-send-string
+ tcp-connection
+ (format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost: %s\n\n"
+ report (gnus-emacs-version) host)))))
(defun spam-report-url-ping-mm-url (host report)
"Ping a host through HTTP, addressing a specific GET resource. Use