<@LICENSE>
Copyright 2004 Apache Software Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</@LICENSE>

=head1 NAME

spamassassin - simple front-end filtering script for SpamAssassin

=head1 SYNOPSIS

B<spamassassin> [options] [ < I<mailmessage> | I<path> ... ]

B<spamassassin> B<-d> [ < I<mailmessage> | I<path> ... ]

B<spamassassin> B<-r> [ < I<mailmessage> | I<path> ... ]

B<spamassassin> B<-k> [ < I<mailmessage> | I<path> ... ]

B<spamassassin> B<-W>|B<-R> [ < I<mailmessage> | I<path> ... ]

Options:

 -L, --local                       Local tests only (no online tests)
 -r, --report                      Report message as spam
 -k, --revoke                      Revoke message as spam
 -d, --remove-markup               Remove spam reports from a message
 -C path, --configpath=path, --config-file=path
                                   Path to standard configuration dir
 -p prefs, --prefspath=file, --prefs-file=file
                                   Set user preferences file
 --siteconfigpath=path             Path for site configs
                                   (def: /etc/mail/spamassassin)
 --cf='config line'                Additional line of configuration
 --pre='config line'               Additional line of ".pre" (prepended to configuration)
 -x, --nocreate-prefs              Don't create user preferences file
 -e, --exit-code                   Exit with a non-zero exit code if the
                                   tested message was spam
 --mbox                            read in messages in mbox format
 --mbx                             read in messages in UW mbx format
 -t, --test-mode                   Pipe message through and add extra
                                   report to the bottom
 --lint                            Lint the rule set: report syntax errors
 -W, --add-to-whitelist            Add addresses in mail to persistent address whitelist
 --add-to-blacklist                Add addresses in mail to persistent address blacklist
 -R, --remove-from-whitelist       Remove all addresses found in mail from
                                   persistent address list
 --add-addr-to-whitelist=addr      Add addr to persistent address whitelist
 --add-addr-to-blacklist=addr      Add addr to persistent address blacklist
 --remove-addr-from-whitelist=addr Remove addr from persistent address list
 -4 --ipv4only, --ipv4-only, --ipv4 Use IPv4, disable use of IPv6 for DNS etc.
 -6                                Use IPv6, disable use of IPv4 where possible
 --progress                        Print progress bar
 -D, --debug [area=n,...]          Print debugging messages
 -V, --version                     Print version
 -h, --help                        Print usage message

=head1 DESCRIPTION

spamassassin is a simple front-end filter for SpamAssassin.

Using the SpamAssassin rule base, it uses a wide range of heuristic
tests on mail headers and body text to identify "spam", also known as
unsolicited bulk email.  Once identified, the mail is then tagged as
spam for later filtering using the user's own mail user-agent
application.

The default tagging operations that take place are detailed in L<spamassassin/"TAGGING">.

By default, message(s) are read in from STDIN (< I<mailmessage>), or
from specified files and directories (I<path> ...)  STDIN and files
are assumed to be in I<file> format, with a single message per file.
Directories are assumed to be in a format where each file in the directory
contains only one message (directories are not recursed and filenames
containing whitespace or beginning with "." or "," are skipped).
The options I<--mbox> and I<--mbx> can override the assumed format,
see the appropriate OPTION information below.

Please note that SpamAssassin is not designed to scan large
messages. Don't feed messages larger than about 500 KB to
SpamAssassin, as this will consume a huge amount of memory.

=head1 OPTIONS

=over 4

=item B<-e>, B<--error-code>, B<--exit-code>

Exit with a non-zero error code, if the message is determined to be
spam.

=item B<-h>, B<--help>

Print help message and exit.

=item B<-V>, B<--version>

Print version and exit.

=item B<-t>, B<--test-mode>

Test mode.  Pipe message through and add extra report.  Note that the report
text assumes that the message is spam, since in normal use it is only visible
in this case.  Pay attention to the score instead.

If you run this with B<-d>, the message will first have SpamAssassin
markup removed before being tested.

=item B<-r>, B<--report>

Report this message as manually-verified spam.  This will submit the mail
message read from STDIN to various spam-blocker databases.  Currently,
these are the Distributed Checksum Clearinghouse
C<https://www.dcc-servers.net/dcc/>, Pyzor
C<http://pyzor.org/>, Vipul's Razor
C<http://razor.sourceforge.net/>, and SpamCop C<http://www.spamcop.net/>.

If the message contains SpamAssassin markup, the markup will be stripped
out automatically before submission.  The support modules for DCC, Pyzor,
and Razor must be installed for spam to be reported to each service.
SpamCop reports will have greater effect if you register and set the
C<spamcop_to_address> option.

The message will also be submitted to SpamAssassin's learning systems;
currently this is the internal Bayesian statistical-filtering system (the
BAYES rules).  (Note that if you I<only> want to perform statistical
learning, and do not want to report mail to third-parties, you should use
the C<sa-learn> command directly instead.)

=item B<-k>, B<--revoke>

Revoke this message.  This will revoke the mail message read from STDIN from
various spam-blocker databases.  Currently, these are Vipul's Razor.

Revocation support for the Distributed Checksum Clearinghouse, Pyzor, and
SpamCop is not currently available.

If the message contains SpamAssassin markup, the markup will be stripped
out automatically before submission.  The support modules for Razor must
be installed for spam to be revoked from the service.

The message will also be submitted as 'ham' (non-spam) to SpamAssassin's
learning systems; currently this is the internal Bayesian
statistical-filtering system (the BAYES rules).  (Note that if you I<only>
want to perform statistical learning, and do not want to report mail to
third-parties, you should use the C<sa-learn> command directly instead.)

=item B<--lint>

Syntax check (lint) the rule set and configuration files, reporting
typos and rules that do not compile correctly.  Exits with 0 if there
are no errors, or greater than 0 if any errors are found.

=item B<-W>, B<--add-to-whitelist>

Add all email addresses, in the headers and body of the mail message read
from STDIN, to a persistent address whitelist.  Note that you must be running
C<spamassassin> or C<spamd> with a persistent address list plugin enabled for
this to work.

=item B<--add-to-blacklist>

Add all email addresses, in the headers and body of the mail message read
from STDIN, to the persistent address blacklist.  Note that you must be
running C<spamassassin> or C<spamd> with a persistent address list plugin
enabled for this to work.

=item B<-R>, B<--remove-from-whitelist>

Remove all email addresses, in the headers and body of the mail message read
from STDIN, from a persistent address list. STDIN must contain a full email
message, so to remove a single address you should use
B<--remove-addr-from-whitelist> instead.

Note that you must be running C<spamassassin> or C<spamd> with a persistent
address list plugin enabled for this to work.

=item B<--add-addr-to-whitelist>

Add the named email address to a persistent address whitelist.  Note that you
must be running C<spamassassin> or C<spamd> with a persistent address list
plugin enabled for this to work.

=item B<--add-addr-to-blacklist>

Add the named email address to a persistent address blacklist.  Note that you
must be running C<spamassassin> or C<spamd> with a persistent address list
plugin enabled for this to work.

=item B<--remove-addr-from-whitelist>

Remove the named email address from a persistent address whitelist.  Note that
you must be running C<spamassassin> or C<spamd> with a persistent address
list plugin enabled for this to work.

=item B< --ipv4only>, B<--ipv4-only>, B<--ipv4>

Do not use IPv6 for DNS tests. Normally, SpamAssassin will try to detect if
IPv6 is available, using only IPv4 if it is not. Use if the existing tests
for IPv6 availability produce incorrect results or crashes.

=item B<-L>, B<--local>

Do only the ''local'' tests, ones that do not require an internet connection to
operate.  Normally, SpamAssassin will try to detect whether you are connected
to the net before doing these tests anyway, but for faster checks you may wish
to use this.

Note that SpamAssassin's network rules are run in parallel.  This can cause
overhead in terms of the number of file descriptors required if B<--local> is
not used; it is recommended that the minimum limit on fds be raised to at least
256 for safety.

=item B<-d>, B<--remove-markup>

Remove SpamAssassin markup (the "SpamAssassin results" report, X-Spam-Status
headers, etc.) from the mail message.  The resulting message, which will be
more or less identical to the original, pre-SpamAssassin input, will be output
to STDOUT.

(Note: the message will not be exactly identical; some headers will be
reformatted due to some features of the Mail::Internet package, but the body
text will be.)

=item B<-C> I<path>, B<--configpath>=I<path>, B<--config-file>=I<path>

Use the specified path for locating the distributed configuration files.
Ignore the default directories (usually C</usr/share/spamassassin> or similar).

=item B<--siteconfigpath>=I<path>

Use the specified path for locating site-specific configuration files.  Ignore
the default directories (usually C</etc/mail/spamassassin> or similar).

=item B<--cf='config line'>

Add additional lines of configuration directly from the command-line, parsed
after the configuration files are read.   Multiple B<--cf> arguments can be
used, and each will be considered a separate line of configuration.  For
example:

        spamassassin -t --cf="body NEWRULE /text/" --cf="score NEWRULE 3.0"

=item B<--pre='config line'>

Add additional lines of .pre configuration directly from the command-line,
parsed before the configuration files are read.  Multiple B<--pre> arguments
can be used, and each will be considered a separate line of configuration. 
For example:

        spamassassin -t --pre="loadplugin Mail::SpamAssassin::Plugin::Foobar"

=item B<-p> I<prefs>, B<--prefspath>=I<prefs>, B<--prefs-file>=I<prefs>

Read user score preferences from I<prefs> (usually C<$HOME/.spamassassin/user_prefs>).

=item B<--progress>

Prints a progress bar (to STDERR) showing the current progress.  This option
will only be useful if you are redirecting STDOUT (and not STDERR).  In the
case where no valid terminal is found this option will behave very much like
the --showdots option in other SpamAssassin programs.

=item B<-D> [I<area,...>], B<--debug> [I<area,...>]

Produce debugging output. If no areas are listed, all debugging information is
printed. Diagnostic output can also be enabled for each area individually;
I<area> is the area of the code to instrument. For example, to produce
diagnostic output on bayes, learn, and dns, use:

        spamassassin -D bayes,learn,dns

Higher priority informational messages that are suitable for logging in normal
circumstances are available with an area of "info".

For more information about which areas (also known as channels) are available,
please see the documentation at:

	L<http://wiki.apache.org/spamassassin/DebugChannels>

=item B<-x>, B<--nocreate-prefs>

Disable creation of user preferences file.

=item B<--mbox>

Specify that the input message(s) are in mbox format.  mbox is a standard
Unix message folder format.

=item B<--mbx>

Specify that the input message(s) are in UW .mbx format.  mbx is
the mailbox format used within the University of Washington's IMAP
implementation; see C<http://www.washington.edu/imap/>.

=back

=head1 SEE ALSO

sa-learn(1)
spamd(1)
spamc(1)
Mail::SpamAssassin::Conf(3)
Mail::SpamAssassin(3)

=head1 PREREQUISITES

C<Mail::SpamAssassin>

=head1 BUGS

See <http://issues.apache.org/SpamAssassin/>

=head1 AUTHORS

The SpamAssassin(tm) Project <https://spamassassin.apache.org/>

=head1 COPYRIGHT

SpamAssassin is distributed under the Apache License, Version 2.0, as
described in the file C<LICENSE> included with the distribution.

=cut

