Project Management Committee (PMC):

  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
   - Alex Broens
   - Adam Katz
   - Sidney Markowitz     http://www.amazon.com/o/registry/1WJ8J7403BLTS
   - Mark Martinec
   - Kevin A. McGrail
   - Michael Parker       http://www.amazon.com/o/registry/10BBAR2M03T6F

Committers:

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

   - John Hardin
   - Henrik Krohns
   - Joe Quinn

PMC Emeritus & inactive committers:

  This list contains all PMC Emeritus & inactive committers in alphabetical order.

  We wish them well and hope to see them return someday.

   - Matthew Cline
   - Duncan Findlay - PMC Emeritus
   - Tony Finch
   - Steve Freegard
   - Craig Hughes 
   - Matt Kettler - PMC Emeritus
   - Justin Mason - Creator & PMC Emeritus
   - Robert Menschel
   - Daryl C. W. O'Shea - PMC Emeritus
   - John Gardiner Myers
   - Daniel Quinlan - PMC Emeritus
   - Dale 'Doc' Schneider - PMC Emeritus
   - Matt Sergeant
   - Henry Stern
   - Malte S. Stretz - PMC Emeritus
   - Warren Togami
   - Theo Van Dinter - PMC Emeritus
   - Matt Yackley
   - Daniel Lemke

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

  - Ivo Truxa: TxRep reputation database plugin.

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

  - David B Funk <dbfunk(at)engineering.uiowa.edu>: Fix for newline collapse
    causing excessive whitespace rules to not match

  - 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)pccc.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 Computer Consultants Corporation
  (previously 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.pccc.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 James Thompson at cPanel Inc who designed our new logo in 2014 and
  to Christian Rauh, winner of the SpamAssassin logo contest, who created, 
  designed, and illustrated our first Apache SpamAssassin logo.

