Copyright (C) 2015 The Apache Software Foundation

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	  http://www.msf.org/en/donate
   - Adam Katz
   - Sidney Markowitz
   - Mark Martinec
   - Kevin A. McGrail
   - Michael Parker       http://www.amazon.com/o/registry/10BBAR2M03T6F
   - Joe Quinn

Committers:

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

   - Bill Cole
   - John Hardin
   - Henrik Krohns

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 Köhntopp, <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 Ö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 Potortì, <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.

