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-official correspondence.

   - Theo Van Dinter      http://www.amazon.com/o/registry/2ET4XKZ3OEDQW
   - Duncan Findlay
   - Matt Kettler
   - Sidney Markowitz     http://www.amazon.com/o/registry/1WJ8J7403BLTS
   - 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
   - Robert Menschel
   - John Gardiner Myers
   
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
   - 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 text 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.

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

  - 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

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

Hosting:

  Thanks to our 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.

