Copyright (C) 2019 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.

   - Giovanni Bechis
   - Karsten Bräckelmann
   - Alex Broens	  http://www.msf.org/en/donate
   - Bill Cole
   - John Hardin
   - Dave Jones
   - Adam Katz
   - Henrik Krohns
   - 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

   - Paul Stead
   - Merijn van den Kroonenberg
   - Bryan Vest

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.

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

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

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

