Project Management Committee:

  This list contains PMC members in alphabetical order (and their Amazon
  wishlists).  The PMC can be reached at <private /at/ spamassassin.apache.org>
  (for private correspondence) or <dev /at/ spamassassin.apache.org> (for
  public contact); we request that the dev list should be used for all
  non-confidential correspondence.

   - Karsten Bräckelmann
   - Theo Van Dinter      http://www.amazon.com/o/registry/2ET4XKZ3OEDQW
   - Duncan Findlay
   - Matt Kettler
   - Sidney Markowitz     http://www.amazon.com/o/registry/1WJ8J7403BLTS
   - Mark Martinec
   - Justin Mason         http://www.amazon.com/o/registry/1M0UDEXT6A3I7
   - Kevin A. McGrail
   - Daryl C. W. O'Shea   http://www.amazon.com/o/registry/2UUNX1ZJ2Y6S4
   - Michael Parker       http://www.amazon.com/o/registry/10BBAR2M03T6F
   - Daniel Quinlan       http://www.amazon.com/o/registry/3B3ST4DS9DTL0
   - Dale 'Doc' Schneider
   - Malte S. Stretz

Committers:

  This list contains committers in alphabetical order (and their Amazon
  wishlists).

   - Tony Finch
   - John Hardin
   - Adam Katz
   - Warren Togami        http://www.amazon.com/wishlist/1RJO0CGTPEDQT
   
Inactive committers:

  This list contains all inactive committers in alphabetical order (and their
  Amazon wishlists).  They have not committed anything for six months, and so
  are considered to have retired from active duty, although they may still be
  involved in other aspects of the project.  We wish them well and hope to see
  them return someday.

   - Matthew Cline
   - Craig Hughes         http://www.amazon.com/o/registry/1G97F2FF1AWCK
   - Robert Menschel
   - John Gardiner Myers
   - Matt Sergeant
   - Henry Stern
   - Matt Yackley

Spamc credits:

  - Author: Craig Hughes
  - Conversion to a thread-safe shared library by Liam Widdowson
  - Portions by Brad Jorsch
  - Windows adaption by Sidney Markowitz
  - autoconf wrapper (for Unix)/alternative (for Windows): Malte S. Stretz,
    based on work done by Sidney Markowitz
  - spamc/qmail-spamc.c by John Peacock

Spamd:

  - Author: Craig Hughes
  - Parts by Malte S. Stretz


Algorithms:

  The Bayesian-style probabilistic classifier used by SpamAssassin's BAYES
  rules is based on an approach outlined by Gary Robinson. Thanks, Gary!

    http://radio.weblogs.com/0101454/stories/2002/09/16/spamDetection.html


Major contributions:

  - Michael Bell, <mikebell90(at)yahoo.com>: Bayes documentation.

  - Kelsey Cummings, <kgc(at)sonic.net>: client-ip-address security in spamd;
    sql-configs-with-setuid switch added to spamd.

  - Dallas L. Engelken <dallase(at)nmgi.com>: ImageInfo plugin.

  - Justin England, <jengland(at)enetis.net>: SQL support.

  - Steve Friedl, <steve(at)unixwiz.net>: UNIX domain socket support in
    spamd/spamc.

  - Ryan Finnie, <ryan(at)finnie.org>: message encapsulation as
    message/rfc822 attachment.

  - Matt Kettler, <mkettler_sa(at)comcast.net>: most of the anti-drug rules in
    rules/20_drugs.cf; bug fix for list of reserved IP addresses; others.

  - Brad "anomie" Jorsch, <anomie(at)users.sourceforge.net>: fix
    to avoid losing mail from spamc; BSMTP and -e support; tracking of
    number of spamd processes; several other mods.

  - Kristian Koehntopp <kris(at)koehntopp.de>: LDAP support.

  - Matthias Leisi <matthias(at)leisi.net>: Mail::SpamAssassin::Plugin::ASN
    plugin.

  - Daniel Lemke, <lemke(at)jam-software.com>: many Windows support fixes

  - John Madden, <maddenj+spamassassin at skynet.ie>: spamc -F configuration
    file support.

  - Sidney Markowitz, <sidney(at)sidney.com>: fix to DNS tests;
    message-size sanity-checking in spamc; language identification;
    Win32 build support.
  
  - Marc Merlin, <marc_soft(at)merlins.org>: RBL ordering/timeouts;
    time-logging for debug speed testing.

  - Bob Menschel: 'longwords' rules, some documentation.

  - Eugene/Yevgeniy Miretsky, <eugene(at)invision.net>: bug fix for
    spamc -c; Spamc timeout support; support for REPORT, REPORT_IFSPAM
    and SYMBOLS methods in spamc.

  - Gertjan van Noord, <vannoord(at)let.rug.nl>: TextCat language classifier
    
  - Michael Parker, <parkerm(at)pobox.com>: Bayes-in-SQL and AWL-in-SQL;
    writing Bayes regression tests.

  - John Peacock, <jpeacock(at)rowman.com>: qmail-spamc in contrib;
    patch to README file

  - Marc Perkel, <marc(at)perkel.com>: 30-or-so rules; about 20 of which are
    still in codebase.

  - Nico Prenzel, <nico.prenzel(at)pn-systeme.de>: remote learning and
    spam-reporting support in spamc/spamd.

  - Dustin Sallings, <dustin+spamassassin(at)spy.net>: support for
    virtual users in spamd.
    
  - Ed Allen Smith, <easmith(at)beatrice.rutgers.edu>: GA improvements; 6
    rules.

  - Henry Stern: perceptron score optimizer (replacing the GA).

  - Liam Widdowson, <liam(at)inodes.org>: shared-library use of spamc.

  - Radoslaw Zielinski, <radek(at)pld-linux.org>:
    Mail::SpamAssassin::Spamd::Apache2, a mod_perl2 module implementing spamd,
    contributed as a Google Summer of Code project.


Translators:

  - Michel Bouissou, <michel(at)bouissou.net>: French translation.

  - Olivier Nicole, <on(at)cs.ait.ac.th>: prior version of French translation.

  - Jesse Houwing, <j.houwing(at)student.utwente.nl>: Dutch translation.

  - Alexander Litvinov, <lan(at)ac-sw.com>: Russian translation.

  - Peter Mann, <peter.mann(at)tuke.sk>: Slovak translation.

  - Klaus Heinz, <klaus.heinz(at)onlinehome.de>: German translation.


Patch submitters:

  - Michael Brown, <michaelb(at)opentext.com>: support to build libspamc.so

  - Nick "Nix" Alcock, <nix(at)esperi.org.uk>: DCC fix

  - Bob Apthorpe, <apthorpe+sa(at)cynistar.net>: tools/sa-stats.pl 

  - Alan Barrett, <apb(at)cequrux.com>: base64 decoding code

  - Rod Begbie, <rod(at)begbie.com> <rOD-spamassassin(at)arsecandle.org>: DCC
    bugfixes.

  - Robert Bihlmeyer, <robbe(at)orcus.priv.at>: CHARSET_FARAWAY_HEADERS test

  - Richard Birkett, <richard(at)birkett.com>: patch to a build script.

  - Cassandra Brockett, <cass(at)ophiuchi.net>: brought SQL checks and
    documentation into line

  - Adrian Bunk, <bunk(at)fs.tum.de>: URI_IS_POUND

  - Ken Causey, <ken(at)kencausey.com>: patch to remove reserved IPs;
    improve performance of network lookups.

  - Jean Charles Delepine, <delepine(at)u-picardie.fr>: report_charset
    support.

  - Anirvan Chatterjee, <anirvan(at)chatterjee.net>:
    <anirvan(at)chatterjee.net>; suggestions for TO_HAS_SPACES rule
    and TO_ADDRESS_EQ_REAL;

  - Andrey Chernov, <ache(at)nagual.pp.ru>: miscellaneous bug fixes.

  - Christopher Davis, <ckd-spamassassin(at)ckdhr.com>: patch to
    contrib/spamcheck.py.

  - Vince Delvecchio, <vince.delvecchio(at)analog.com>: negative look-behinds
    PORN_4

  - Chris Eykamp, <chris(at)eykamp.com>: 4 weight loss rules.

  - Alan Ford, <alan(at)whirlnet.co.uk>: Getting a list of symbols of tests hit
    with spamd; patch for spamd response headers.

  - Scott Griffith, <skod(at)ises-llc.com>: 12 tests; 7 still in codebase.

  - Ask Bjoern Hansen, <ask(at)develooper.com> <ask(at)apache.org>:
    REPORT_IFSPAM in spamd.

  - Sean Harding, <sharding(at)dogcow.org>: patch for
    X-Spam-Checker-Version.

  - Klaus Heinz, <klaus.heinz(at)onlinehome.de>: changes to rules;
    packaging fixes for UNIX package; German translation.

  - Ed Henderson, <ed.henderson(at)certainty.net>: fix for vpopmail support in
    spamd.

  - David Hull, <hull(at)paracel.com> <hull(at)davidhull.org>:
    rewrite_subject and report_header; rules

  - Morbus Iff, <morbus(at)disobey.com>: don't create prefs patch.

  - David F. Skoll, <dfs(at)roaringpenguin.com>: one line change to
    __OUTLOOK_MUA.

  - Steve Keay, <steve-spamassassin-bugzilla(at)keay.com>: spamd -A network
    ranges support.

  - Vivek Khera, <khera(at)kcilink.com>: contributed to Razor2 patch.

  - Alexander Kourakos, <awk(at)bnt.com>: bug fixes.

  - Juergen Kreileder, <kreilede(at)issan.informatik.uni-dortmund.de>:
    misc fixes; Bayes ignore Gnus annotation

  - Henrik Krohns, <hege@hege.li>, 'uridnssub' keyword for URIDNSBL plugin.

  - David M. Koppelman, <koppel(at)ece.lsu.edu>: bayes_score report
    fix; bayes expiry time bugfix.

  - Gregor Lawatscheck, <gpel(at)mpex.net>: rule suggestions

  - Michael Lemke, <lemkemch(at)t-online.de>: Win32Locker fix

  - John Levine, <johnl(at)iecc.com>: added --syslog=stderr support.

  - Tom Lipkis, <tal(at)pss.com>: SunOS 4.1.4 support.

  - Dave Lugo, <dlugo(at)etherboy.com>: documentation regarding use of
    DCC in INSTALL file.

  - Mark Martinec, <Mark.Martinec(at)ijs.si>: contributed to Razor2 patch

  - Morgan Massena, <mmassena(at)ipowerplant.com>: patch to SQL support to
    allow installer to specify more table details.

  - Kevin McGrail, <kmcgrail(at)peregrinehw.com>: portability fix for
    Red Hat 5 support.

  - Rob McMillin, <rlm(at)pricegrabber.com> <rfm(at)scareduck.com>:
    rule fixes.

  - Michael Moncur, <mgm(at)starlingtech.com>: many rules; SQL fix.

  - John Morrissey, <jwm(at)horde.net>: fixed "check_rbl() doesn't check $#ips
    properly".

  - Dirk Mueller, <mueller(at)kde.org>: spamc low-memory bugfix.

  - Nate Mueller, <nate(at)cs.wisc.edu>: SSL support in spamd/spamc;

  - Rob Nagler, <nagler(at)bivio.com>: speed-up bug fix.

  - Nathan Neulinger, <nneul(at)umr.edu>: security patch; code
    cleanup; dccifd support.

  - John Newman, <jnewman(at)scms.waikato.ac.nz>: UW .mbx file-format support.

  - Mike Nolan, <nolan(at)naic.edu>: SunOS build directions

  - Martin O"stlund, <mo(at)microsaft.nu>: Slackware 9.0 rc-script for spamd.

  - Tomasz Ostrowski, <tometzky(at)batory.org.pl>: perl 5.005 support.

  - Henning P. Schmiedehausen, <hps(at)intermeta.de> <henning(at)apache.org>:
    adding ? to shell globs.

  - Francesco Potorti, <pot(at)gnu.org>: documentation improvements

  - Alan Premselaar, <alien(at)12inch.com>: rule suggestions.

  - Martin Radford, <martin-sabz(at)zamenhof.demon.co.uk>: rules and
    rule descriptions.

  - Daniel Rall, <dlr(at)finemaltcoding.com>: documentation fix.

  - Brad Rathbun, <brad(at)computechnv.com>: tools/sa-stats.pl.

  - Xavier Renaut, <node3667(at)users.sourceforge.net>: contrib/spamproxyd
    bugfix.

  - Bobby Rose, <brose(at)med.wayne.edu>: Pyzor support; dcc_path.

  - Klaus Johannes Rusch, <KlausRusch(at)atmedia.net>: fix for
    find_all_addrs_in_line().

  - Bart Schaefer, <schaefer(at)zanshin.com>: bug fix for DCC; Razor
    support; rules.

  - Al Smith, <al.smith(at)aeschi.ch.eu.org>: fix to SSL spamd bug.

  - Sander Steffann, <sander(at)steffann.nl>: patch to contrib/spamcheck.py.

  - Michael Stenner, <mstenner(at)phy.duke.edu>: ident authentication support
    in spamd.

  - Brett A. Thomas, <bthomas(at)vindicia.com>: improved sa-learn
    command-line API.

  - Reini Urban, <rurban(at)x-ray.at>: fix to Makefile for cygwin

  - Tobias von Koch, <tvk(at)weltcharts.de>: DCC support fixes; rules.

  - Vince Vielhaber, <vev(at)michvhf.com>: spamc -c bugfix patch.

  - Charlie Watts, <cewatts(at)frontier.net>: patch to deal with perl
    bug on BSD platforms; DNS timeouts.

  - Andrew Wilson, <andrew(at)rivendale.net>: support for MIME::Entity
    contributed.

  - Jeremy Zawodny, <jeremy(at)zawodny.com>: patch to SQL support.

  - The Little Rubber Ninja Homepage <http://www.unsuave.com/ninja/>, owned
    by Mike Quinn: source of the original SpamAssassin logo.

  If your name is not here, and you've submitted a patch that was included, 
  it's just an oversight. Please mail me at <jm /at/ jmason.org> and I'll add 
  you to the list.

ASF Sponsorship:

  SpamAssassin is an Apache Software Foundation project.  The Apache Software 
  Foundation could not exist without the continued generous support from the 
  community.

  Please take a moment to view the complete list of sponsors by visiting:

    http://www.apache.org/foundation/thanks.html

  If you are interested in sponsoring the ASF, please read the sponsorship page
  by visiting:

    http://www.apache.org/foundation/sponsorship.html for more information.

Resources:

  Thanks to our previous mirrors: Peregrine Hardware, Inc. and Kevin A. McGrail, 
  Jeremy Zawodny, Mark Reynolds, RedIRIS, Hagen Herrschaft, and PlanetMirror.
  
  Thanks to Mark Reynolds of Reynolds Technology (http://www.reynolds.net.au/)
  for the registration of spamassassin.org.

  Thanks to Kelsey Cummings and Sonic.net (http://www.sonic.net/) for
  significant contributions with network services, and on the back-end; our
  score-optimization systems would be significantly weedier without their help.

	http://www.peregrinehw.com/
	http://www.zawodny.com/
	http://www.reynolds.net.au/
	http://www.rediris.es/
	http://www.hrxnet.de/
	http://www.planetmirror.com/
	http://sourceforge.net/
	http://www.sonic.net/

Finally:

  Thanks to Christian Rauh, winner of the SpamAssassin logo contest, who
  created, designed, and illustrated the Apache SpamAssassin logo.

