You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2006/10/16 17:57:59 UTC

svn commit: r464529 [5/11] - in /spamassassin/site/full/3.1.x: ./ doc/

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::DnsResolver - DNS resolution engine</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::DnsResolver - DNS resolution engine</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This is a DNS resolution engine for SpamAssassin, implemented in order to
+reduce file descriptor usage by Net::DNS and avoid a response collision bug in
+that module.</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_load_resolver">$res-&gt;<code>load_resolver()</code></a></strong><br />
+</dt>
+<dd>
+Load the <code>Net::DNS::Resolver</code> object.  Returns 0 if Net::DNS cannot be used,
+1 if it is available.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_resolver">$resolver = $res-&gt;<code>get_resolver()</code></a></strong><br />
+</dt>
+<dd>
+Return the <code>Net::DNS::Resolver</code> object.
+</dd>
+<p></p>
+<dt><strong><a name="item_nameservers">$res-&gt;<code>nameservers()</code></a></strong><br />
+</dt>
+<dd>
+Wrapper for Net::DNS::Reslolver-&gt;nameservers to get or set list of nameservers
+</dd>
+<p></p>
+<dt><strong><a name="item_connect_sock">$res-&gt;<code>connect_sock()</code></a></strong><br />
+</dt>
+<dd>
+Re-connect to the first nameserver listed in <code>/etc/resolv.conf</code> or similar
+platform-dependent source, as provided by <code>Net::DNS</code>.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_sock">$res-&gt;<code>get_sock()</code></a></strong><br />
+</dt>
+<dd>
+Return the <code>IO::Socket::INET</code> object used to communicate with
+the nameserver.
+</dd>
+<p></p>
+<dt><strong><a name="item_new_dns_packet">$packet = new_dns_packet ($host, $type, $class)</a></strong><br />
+</dt>
+<dd>
+A wrapper for <code>Net::DNS::Packet::new()</code> which traps a die thrown by it.
+</dd>
+<dd>
+<p>To use this, change calls to <code>Net::DNS::Resolver::bgsend</code> from:</p>
+</dd>
+<dd>
+<pre>
+    $res-&gt;bgsend($hostname, $type);</pre>
+</dd>
+<dd>
+<p>to:</p>
+</dd>
+<dd>
+<pre>
+    $res-&gt;bgsend(Mail::SpamAssassin::DnsResolver::new_dns_packet($hostname, $type, $class));</pre>
+</dd>
+<p></p>
+<dt><strong><a name="item_bgsend">$id = $res-&gt;bgsend($host, $type, $class, $cb)</a></strong><br />
+</dt>
+<dd>
+Quite similar to <code>Net::DNS::Resolver::bgsend</code>, except that when a response
+packet eventually arrives, and <a href="#item_poll_responses"><code>poll_responses</code></a> is called, the callback
+sub reference <code>$cb</code> will be called.
+</dd>
+<dd>
+<p>Note that <code>$type</code> and <code>$class</code> may be <code>undef</code>, in which case they
+will default to <code>A</code> and <code>IN</code>, respectively.</p>
+</dd>
+<dd>
+<p>The callback sub will be called with two arguments -- the packet that was
+delivered and an id string that fingerprints the query packet and the expected reply.
+It is expected that a closure callback be used, like so:</p>
+</dd>
+<dd>
+<pre>
+  my $id = $self-&gt;{resolver}-&gt;bgsend($host, $type, undef, sub {
+        my $reply = shift;
+        my $reply_id = shift;
+        $self-&gt;got_a_reply ($reply, $reply_id);
+      });</pre>
+</dd>
+<dd>
+<p>The callback can ignore the reply as an invalid packet sent to the listening port
+if the reply id does not match the return value from bgsend.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_poll_responses">$nfound = $res-&gt;<code>poll_responses()</code></a></strong><br />
+</dt>
+<dd>
+See if there are any <a href="#item_bgsend"><code>bgsend</code></a> response packets ready, and return
+the number of such packets delivered to their callbacks.
+</dd>
+<p></p>
+<dt><strong><a name="item_bgabort">$res-&gt;<code>bgabort()</code></a></strong><br />
+</dt>
+<dd>
+Call this to release pending requests from memory when aborting backgrounded requests
+</dd>
+<p></p>
+<dt><strong><a name="item_send">$packet = $res-&gt;send($name, $type, $class)</a></strong><br />
+</dt>
+<dd>
+Emulates <a href="#item_send"><code>Net::DNS::Resolver::send()</code></a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_finish_socket">$res-&gt;<code>finish_socket()</code></a></strong><br />
+</dt>
+<dd>
+Reset socket when done with it.
+</dd>
+<p></p>
+<dt><strong><a name="item_finish">$res-&gt;<code>finish()</code></a></strong><br />
+</dt>
+<dd>
+Clean up for destruction.
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_DnsResolver.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,80 @@
+NAME
+    Mail::SpamAssassin::DnsResolver - DNS resolution engine
+
+DESCRIPTION
+    This is a DNS resolution engine for SpamAssassin, implemented in order
+    to reduce file descriptor usage by Net::DNS and avoid a response
+    collision bug in that module.
+
+METHODS
+    $res->load_resolver()
+        Load the "Net::DNS::Resolver" object. Returns 0 if Net::DNS cannot
+        be used, 1 if it is available.
+
+    $resolver = $res->get_resolver()
+        Return the "Net::DNS::Resolver" object.
+
+    $res->nameservers()
+        Wrapper for Net::DNS::Reslolver->nameservers to get or set list of
+        nameservers
+
+    $res->connect_sock()
+        Re-connect to the first nameserver listed in "/etc/resolv.conf" or
+        similar platform-dependent source, as provided by "Net::DNS".
+
+    $res->get_sock()
+        Return the "IO::Socket::INET" object used to communicate with the
+        nameserver.
+
+    $packet = new_dns_packet ($host, $type, $class)
+        A wrapper for "Net::DNS::Packet::new()" which traps a die thrown by
+        it.
+
+        To use this, change calls to "Net::DNS::Resolver::bgsend" from:
+
+            $res->bgsend($hostname, $type);
+
+        to:
+
+            $res->bgsend(Mail::SpamAssassin::DnsResolver::new_dns_packet($hostname, $type, $class));
+
+    $id = $res->bgsend($host, $type, $class, $cb)
+        Quite similar to "Net::DNS::Resolver::bgsend", except that when a
+        response packet eventually arrives, and "poll_responses" is called,
+        the callback sub reference $cb will be called.
+
+        Note that $type and $class may be "undef", in which case they will
+        default to "A" and "IN", respectively.
+
+        The callback sub will be called with two arguments -- the packet
+        that was delivered and an id string that fingerprints the query
+        packet and the expected reply. It is expected that a closure
+        callback be used, like so:
+
+          my $id = $self->{resolver}->bgsend($host, $type, undef, sub {
+                my $reply = shift;
+                my $reply_id = shift;
+                $self->got_a_reply ($reply, $reply_id);
+              });
+
+        The callback can ignore the reply as an invalid packet sent to the
+        listening port if the reply id does not match the return value from
+        bgsend.
+
+    $nfound = $res->poll_responses()
+        See if there are any "bgsend" response packets ready, and return the
+        number of such packets delivered to their callbacks.
+
+    $res->bgabort()
+        Call this to release pending requests from memory when aborting
+        backgrounded requests
+
+    $packet = $res->send($name, $type, $class)
+        Emulates "Net::DNS::Resolver::send()".
+
+    $res->finish_socket()
+        Reset socket when done with it.
+
+    $res->finish()
+        Clean up for destruction.
+

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Logger - SpamAssassin logging module</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Logger - SpamAssassin logging module</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  use Mail::SpamAssassin::Logger;</pre>
+<pre>
+  $SIG{__WARN__} = sub {
+    log_message(&quot;warn&quot;, $_[0]);
+  };</pre>
+<pre>
+  $SIG{__DIE__} = sub {
+    log_message(&quot;error&quot;, $_[0]) if $_[0] !~ /\bin eval\b/;
+  };</pre>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_add_facilities"><code>add_facilities(facilities)</code></a></strong><br />
+</dt>
+<dd>
+Enable debug logging for specific facilities.  Each facility is the area
+of code to debug.  Facilities can be specified as a hash reference (the
+key names are used), an array reference, an array, or a comma-separated
+scalar string.
+</dd>
+<dd>
+<p>If ``all'' is listed, then all debug facilities are enabled.  Higher
+priority informational messages that are suitable for logging in normal
+circumstances are available with an area of ``info''.  Some very verbose
+messages require the facility to be specifically enabled (see
+<a href="#item_would_log"><code>would_log</code></a> below).</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_log_message">log_message($level, $message)</a></strong><br />
+</dt>
+<dt><strong>log_message($level, @message)</strong><br />
+</dt>
+<dd>
+Log a message at a specific level.  Levels are specified as strings:
+``warn'', ``error'', ``info'', and ``dbg''.  The first element of the message
+must be prefixed with a facility name followed directly by a colon.
+</dd>
+<p></p>
+<dt><strong><a name="item_dbg">dbg(``facility: message'')</a></strong><br />
+</dt>
+<dd>
+This is used for all low priority debugging messages.
+</dd>
+<p></p>
+<dt><strong><a name="item_info">info(``facility: message'')</a></strong><br />
+</dt>
+<dd>
+This is used for informational messages indicating a normal, but
+significant, condition.  This should be infrequently called.  These
+messages are typically logged when SpamAssassin is run as a daemon.
+</dd>
+<p></p>
+<dt><strong><a name="item_add">add(method =&gt; 'syslog', socket =&gt; $socket, facility =&gt; $facility)</a></strong><br />
+</dt>
+<dd>
+<code>socket</code> is the type the syslog (``unix'' or ``inet'').  <code>facility</code> is the
+syslog facility (typically ``mail'').
+</dd>
+<p></p>
+<dt><strong>add(method =&gt; 'file', filename =&gt; $file)</strong><br />
+</dt>
+<dd>
+<code>filename</code> is the name of the log file.
+</dd>
+<p></p>
+<dt><strong>add(method =&gt; 'stderr')</strong><br />
+</dt>
+<dd>
+No options are needed for stderr logging, just don't close stderr first.
+</dd>
+<p></p>
+<dt><strong><a name="item_remove"><code>remove(method)</code></a></strong><br />
+</dt>
+<dd>
+Remove a logging method.  Only the method name needs to be passed as a
+scalar.
+</dd>
+<p></p>
+<dt><strong><a name="item_would_log">would_log($level, $facility)</a></strong><br />
+</dt>
+<dd>
+Returns 0 if a message at the given level and with the given facility
+would be logged.  Returns 1 if a message at a given level and facility
+would be logged normally.  Returns 2 if the facility was specifically
+enabled.
+</dd>
+<dd>
+<p>The facility argument is optional.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_close_log"><code>close_log()</code></a></strong><br />
+</dt>
+<dd>
+Close all logs.
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,67 @@
+NAME
+    Mail::SpamAssassin::Logger - SpamAssassin logging module
+
+SYNOPSIS
+      use Mail::SpamAssassin::Logger;
+
+      $SIG{__WARN__} = sub {
+        log_message("warn", $_[0]);
+      };
+
+      $SIG{__DIE__} = sub {
+        log_message("error", $_[0]) if $_[0] !~ /\bin eval\b/;
+      };
+
+METHODS
+    add_facilities(facilities)
+        Enable debug logging for specific facilities. Each facility is the
+        area of code to debug. Facilities can be specified as a hash
+        reference (the key names are used), an array reference, an array, or
+        a comma-separated scalar string.
+
+        If "all" is listed, then all debug facilities are enabled. Higher
+        priority informational messages that are suitable for logging in
+        normal circumstances are available with an area of "info". Some very
+        verbose messages require the facility to be specifically enabled
+        (see "would_log" below).
+
+    log_message($level, $message)
+    log_message($level, @message)
+        Log a message at a specific level. Levels are specified as strings:
+        "warn", "error", "info", and "dbg". The first element of the message
+        must be prefixed with a facility name followed directly by a colon.
+
+    dbg("facility: message")
+        This is used for all low priority debugging messages.
+
+    info("facility: message")
+        This is used for informational messages indicating a normal, but
+        significant, condition. This should be infrequently called. These
+        messages are typically logged when SpamAssassin is run as a daemon.
+
+    add(method => 'syslog', socket => $socket, facility => $facility)
+        "socket" is the type the syslog ("unix" or "inet"). "facility" is
+        the syslog facility (typically "mail").
+
+    add(method => 'file', filename => $file)
+        "filename" is the name of the log file.
+
+    add(method => 'stderr')
+        No options are needed for stderr logging, just don't close stderr
+        first.
+
+    remove(method)
+        Remove a logging method. Only the method name needs to be passed as
+        a scalar.
+
+    would_log($level, $facility)
+        Returns 0 if a message at the given level and with the given
+        facility would be logged. Returns 1 if a message at a given level
+        and facility would be logged normally. Returns 2 if the facility was
+        specifically enabled.
+
+        The facility argument is optional.
+
+    close_log()
+        Close all logs.
+

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Logger::File - log to file</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Logger::File - log to file</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  loadplugin     Mail::SpamAssassin::Logger::File</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_File.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,7 @@
+NAME
+    Mail::SpamAssassin::Logger::File - log to file
+
+SYNOPSIS
+      loadplugin     Mail::SpamAssassin::Logger::File
+
+DESCRIPTION

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Logger::Stderr - log to standard error</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Logger::Stderr - log to standard error</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  loadplugin     Mail::SpamAssassin::Logger::Stderr</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Stderr.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,7 @@
+NAME
+    Mail::SpamAssassin::Logger::Stderr - log to standard error
+
+SYNOPSIS
+      loadplugin     Mail::SpamAssassin::Logger::Stderr
+
+DESCRIPTION

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Logger::Syslog - log to syslog</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Logger::Syslog - log to syslog</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  loadplugin     Mail::SpamAssassin::Logger::Syslog</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Logger_Syslog.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,7 @@
+NAME
+    Mail::SpamAssassin::Logger::Syslog - log to syslog
+
+SYNOPSIS
+      loadplugin     Mail::SpamAssassin::Logger::Syslog
+
+DESCRIPTION

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,215 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Message - decode, render, and hold an RFC-2822 message</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#public_methods">PUBLIC METHODS</a></li>
+	<li><a href="#parsing_methods__nonpublic">PARSING METHODS, NON-PUBLIC</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Message - decode, render, and hold an RFC-2822 message</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This module encapsulates an email message and allows access to the various MIME
+message parts and message metadata.</p>
+<p>The message structure, after initiating a <code>parse()</code> cycle, looks like this:
+</p>
+<pre>
+
+  Message object, also top-level node in Message::Node tree
+     |
+     +---&gt; Message::Node for other parts in MIME structure
+     |       |---&gt; [ more Message::Node parts ... ]
+     |       [ others ... ]
+     |
+     +---&gt; Message::Metadata object to hold metadata</pre>
+<p>
+</p>
+<hr />
+<h1><a name="public_methods">PUBLIC METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_new"><code>new()</code></a></strong><br />
+</dt>
+<dd>
+Creates a Mail::SpamAssassin::Message object.  Takes a hash reference
+as a parameter.  The used hash key/value pairs are as follows:
+</dd>
+<dd>
+<p><code>message</code> is either undef (which will use STDIN), a scalar of the
+entire message, an array reference of the message with 1 line per array
+element, or a file glob which holds the entire contents of the message.</p>
+</dd>
+<dd>
+<p>Note: The message is expected to generally be in RFC 2822 format, optionally
+including an mbox message separator line (the ``From '' line) as the first line.</p>
+</dd>
+<dd>
+<p><code>parse_now</code> specifies whether or not to create the MIME tree
+at object-creation time or later as necessary.</p>
+</dd>
+<dd>
+<p>The <em>parse_now</em> option, by default, is set to false (0).
+This allows SpamAssassin to not have to generate the tree of
+Mail::SpamAssassin::Message::Node objects and their related data if the
+tree is not going to be used.  This is handy, for instance, when running
+<code>spamassassin -d</code>, which only needs the pristine header and body which
+is always handled when the object is created.</p>
+</dd>
+<dd>
+<p><code>subparse</code> specifies how many MIME recursion levels should be parsed.
+Defaults to 20.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item__do_parse"><code>_do_parse()</code></a></strong><br />
+</dt>
+<dd>
+Non-Public function which will initiate a MIME part parse (generates
+a tree) of the current message.  Typically called by <a href="#item_find_parts"><code>find_parts()</code></a>
+as necessary.
+</dd>
+<p></p>
+<dt><strong><a name="item_find_parts"><code>find_parts()</code></a></strong><br />
+</dt>
+<dd>
+Used to search the tree for specific MIME parts.  See
+<em>Mail::SpamAssassin::Message::Node</em> for more details.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_pristine_header"><code>get_pristine_header()</code></a></strong><br />
+</dt>
+<dd>
+Returns pristine headers of the message.  If no specific header name
+is given as a parameter (case-insensitive), then all headers will be
+returned as a scalar, including the blank line at the end of the headers.
+</dd>
+<dd>
+<p>If called in an array context, an array will be returned with each
+specific header in a different element.  In a scalar context, the last
+specific header is returned.</p>
+</dd>
+<dd>
+<p>ie: If 'Subject' is specified as the header, and there are 2 Subject
+headers in a message, the last/bottom one in the message is returned in
+scalar context or both are returned in array context.</p>
+</dd>
+<dd>
+<p>Note: the returned header will include the ending newline and any embedded
+whitespace folding.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_mbox_separator"><code>get_mbox_separator()</code></a></strong><br />
+</dt>
+<dd>
+Returns the mbox separator found in the message, or undef if there
+wasn't one.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_body"><code>get_body()</code></a></strong><br />
+</dt>
+<dd>
+Returns an array of the pristine message body, one line per array element.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_pristine"><code>get_pristine()</code></a></strong><br />
+</dt>
+<dd>
+Returns a scalar of the entire pristine message.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_pristine_body"><code>get_pristine_body()</code></a></strong><br />
+</dt>
+<dd>
+Returns a scalar of the pristine message body.
+</dd>
+<p></p>
+<dt><strong><a name="item_extract_message_metadata"><code>extract_message_metadata($main)</code></a></strong><br />
+</dt>
+<dt><strong><a name="item_get_metadata">$str = <code>get_metadata($hdr)</code></a></strong><br />
+</dt>
+<dt><strong><a name="item_put_metadata">put_metadata($hdr, $text)</a></strong><br />
+</dt>
+<dt><strong><a name="item_delete_metadata"><code>delete_metadata($hdr)</code></a></strong><br />
+</dt>
+<dt><strong><a name="item_get_all_metadata">$str = <code>get_all_metadata()</code></a></strong><br />
+</dt>
+<dt><strong><a name="item_finish_metadata"><code>finish_metadata()</code></a></strong><br />
+</dt>
+<dd>
+Destroys the metadata for this message.  Once a message has been
+scanned fully, the metadata is no longer required.   Destroying
+this will free up some memory.
+</dd>
+<p></p>
+<dt><strong><a name="item_finish"><code>finish()</code></a></strong><br />
+</dt>
+<dd>
+Clean up an object so that it can be destroyed.
+</dd>
+<p></p>
+<dt><strong><a name="item_receive_date"><code>receive_date()</code></a></strong><br />
+</dt>
+<dd>
+Return a time_t value with the received date of the current message,
+or current time if received time couldn't be determined.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="parsing_methods__nonpublic">PARSING METHODS, NON-PUBLIC</a></h1>
+<p>These methods take a RFC2822-esque formatted message and create a tree
+with all of the MIME body parts included.  Those parts will be decoded
+as necessary, and text/html parts will be rendered into a standard text
+format, suitable for use in SpamAssassin.</p>
+<dl>
+<dt><strong><a name="item_parse_body"><code>parse_body()</code></a></strong><br />
+</dt>
+<dd>
+<a href="#item_parse_body"><code>parse_body()</code></a> passes the body part that was passed in onto the
+correct part parser, either <a href="#item__parse_multipart"><code>_parse_multipart()</code></a> for multipart/* parts,
+or <a href="#item__parse_normal"><code>_parse_normal()</code></a> for everything else.  Multipart sections become the
+root of sub-trees, while everything else becomes a leaf in the tree.
+</dd>
+<dd>
+<p>For multipart messages, the first call to <a href="#item_parse_body"><code>parse_body()</code></a> doesn't create a
+new sub-tree and just uses the parent node to contain children.  All other
+calls to <a href="#item_parse_body"><code>parse_body()</code></a> will cause a new sub-tree root to be created and
+children will exist underneath that root.  (this is just so the tree
+doesn't have a root node which points at the actual root node ...)</p>
+</dd>
+<p></p>
+<dt><strong><a name="item__parse_multipart"><code>_parse_multipart()</code></a></strong><br />
+</dt>
+<dd>
+Generate a root node, and for each child part call <a href="#item_parse_body"><code>parse_body()</code></a>
+to generate the tree.
+</dd>
+<p></p>
+<dt><strong><a name="item__parse_normal"><code>_parse_normal()</code></a></strong><br />
+</dt>
+<dd>
+Generate a leaf node and add it to the parent.
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,130 @@
+NAME
+    Mail::SpamAssassin::Message - decode, render, and hold an RFC-2822
+    message
+
+DESCRIPTION
+    This module encapsulates an email message and allows access to the
+    various MIME message parts and message metadata.
+
+    The message structure, after initiating a parse() cycle, looks like
+    this:
+
+      Message object, also top-level node in Message::Node tree
+         |
+         +---> Message::Node for other parts in MIME structure
+         |       |---> [ more Message::Node parts ... ]
+         |       [ others ... ]
+         |
+         +---> Message::Metadata object to hold metadata
+
+PUBLIC METHODS
+    new()
+        Creates a Mail::SpamAssassin::Message object. Takes a hash reference
+        as a parameter. The used hash key/value pairs are as follows:
+
+        "message" is either undef (which will use STDIN), a scalar of the
+        entire message, an array reference of the message with 1 line per
+        array element, or a file glob which holds the entire contents of the
+        message.
+
+        Note: The message is expected to generally be in RFC 2822 format,
+        optionally including an mbox message separator line (the "From "
+        line) as the first line.
+
+        "parse_now" specifies whether or not to create the MIME tree at
+        object-creation time or later as necessary.
+
+        The *parse_now* option, by default, is set to false (0). This allows
+        SpamAssassin to not have to generate the tree of
+        Mail::SpamAssassin::Message::Node objects and their related data if
+        the tree is not going to be used. This is handy, for instance, when
+        running "spamassassin -d", which only needs the pristine header and
+        body which is always handled when the object is created.
+
+        "subparse" specifies how many MIME recursion levels should be
+        parsed. Defaults to 20.
+
+    _do_parse()
+        Non-Public function which will initiate a MIME part parse (generates
+        a tree) of the current message. Typically called by find_parts() as
+        necessary.
+
+    find_parts()
+        Used to search the tree for specific MIME parts. See
+        *Mail::SpamAssassin::Message::Node* for more details.
+
+    get_pristine_header()
+        Returns pristine headers of the message. If no specific header name
+        is given as a parameter (case-insensitive), then all headers will be
+        returned as a scalar, including the blank line at the end of the
+        headers.
+
+        If called in an array context, an array will be returned with each
+        specific header in a different element. In a scalar context, the
+        last specific header is returned.
+
+        ie: If 'Subject' is specified as the header, and there are 2 Subject
+        headers in a message, the last/bottom one in the message is returned
+        in scalar context or both are returned in array context.
+
+        Note: the returned header will include the ending newline and any
+        embedded whitespace folding.
+
+    get_mbox_separator()
+        Returns the mbox separator found in the message, or undef if there
+        wasn't one.
+
+    get_body()
+        Returns an array of the pristine message body, one line per array
+        element.
+
+    get_pristine()
+        Returns a scalar of the entire pristine message.
+
+    get_pristine_body()
+        Returns a scalar of the pristine message body.
+
+    extract_message_metadata($main)
+    $str = get_metadata($hdr)
+    put_metadata($hdr, $text)
+    delete_metadata($hdr)
+    $str = get_all_metadata()
+    finish_metadata()
+        Destroys the metadata for this message. Once a message has been
+        scanned fully, the metadata is no longer required. Destroying this
+        will free up some memory.
+
+    finish()
+        Clean up an object so that it can be destroyed.
+
+    receive_date()
+        Return a time_t value with the received date of the current message,
+        or current time if received time couldn't be determined.
+
+PARSING METHODS, NON-PUBLIC
+    These methods take a RFC2822-esque formatted message and create a tree
+    with all of the MIME body parts included. Those parts will be decoded as
+    necessary, and text/html parts will be rendered into a standard text
+    format, suitable for use in SpamAssassin.
+
+    parse_body()
+        parse_body() passes the body part that was passed in onto the
+        correct part parser, either _parse_multipart() for multipart/*
+        parts, or _parse_normal() for everything else. Multipart sections
+        become the root of sub-trees, while everything else becomes a leaf
+        in the tree.
+
+        For multipart messages, the first call to parse_body() doesn't
+        create a new sub-tree and just uses the parent node to contain
+        children. All other calls to parse_body() will cause a new sub-tree
+        root to be created and children will exist underneath that root.
+        (this is just so the tree doesn't have a root node which points at
+        the actual root node ...)
+
+    _parse_multipart()
+        Generate a root node, and for each child part call parse_body() to
+        generate the tree.
+
+    _parse_normal()
+        Generate a leaf node and add it to the parent.
+

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Message::Metadata - extract metadata from a message</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#public_methods">PUBLIC METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Message::Metadata - extract metadata from a message</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This class is tasked with extracting ``metadata'' from messages for use as
+Bayes tokens, fodder for eval tests, or other rules.  Metadata is
+supplemental data inferred from the message, like the examples below.</p>
+<p>It is held in two forms:</p>
+<p>1. as name-value pairs of strings, presented in mail header format.  For
+  example, ``X-Language'' =&gt; ``en''.  This is the general form for simple
+  metadata that's useful as Bayes tokens, can be added to marked-up
+  messages using ``add_header'', etc., such as the trusted-relay inference
+  and language detection.</p>
+<p>2. as more complex data structures on the $msg-&gt;{metadata} object.  This
+  is the form used for metadata like the HTML parse data, which is stored
+  there for access by eval rule code.   Because it's not simple strings,
+  it's not added as a Bayes token by default (Bayes needs simple strings).</p>
+<p>
+</p>
+<hr />
+<h1><a name="public_methods">PUBLIC METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_new"><code>new()</code></a></strong><br />
+</dt>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Metadata.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,23 @@
+NAME
+    Mail::SpamAssassin::Message::Metadata - extract metadata from a message
+
+SYNOPSIS
+DESCRIPTION
+    This class is tasked with extracting "metadata" from messages for use as
+    Bayes tokens, fodder for eval tests, or other rules. Metadata is
+    supplemental data inferred from the message, like the examples below.
+
+    It is held in two forms:
+
+    1. as name-value pairs of strings, presented in mail header format. For
+    example, "X-Language" => "en". This is the general form for simple
+    metadata that's useful as Bayes tokens, can be added to marked-up
+    messages using "add_header", etc., such as the trusted-relay inference
+    and language detection.
+
+    2. as more complex data structures on the $msg->{metadata} object. This
+    is the form used for metadata like the HTML parse data, which is stored
+    there for access by eval rule code. Because it's not simple strings,
+    it's not added as a Bayes token by default (Bayes needs simple strings).
+
+PUBLIC METHODS

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,218 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Message::Node - decode, render, and make available MIME message parts</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#public_methods">PUBLIC METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Message::Node - decode, render, and make available MIME message parts</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This module will encapsulate an email message and allow access to
+the various MIME message parts.</p>
+<p>
+</p>
+<hr />
+<h1><a name="public_methods">PUBLIC METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_new"><code>new()</code></a></strong><br />
+</dt>
+<dd>
+Generates an empty Node object and returns it.  Typically only called
+by functions in Message.
+</dd>
+<p></p>
+<dt><strong><a name="item_find_parts"><code>find_parts()</code></a></strong><br />
+</dt>
+<dd>
+Used to search the tree for specific MIME parts.  An array of matching
+Node objects (pointers into the tree) is returned.  The parameters that
+can be passed in are (in order, all scalars):
+</dd>
+<dd>
+<p>Regexp - Used to match against each part's Content-Type header,
+specifically the type and not the rest of the header.  ie: ``Content-type:
+text/html; encoding=quoted-printable'' has a type of ``text/html''.  If no
+regexp is specified, <a href="#item_find_parts"><code>find_parts()</code></a> will return an empty array.</p>
+</dd>
+<dd>
+<p>Only_leaves - By default, <a href="#item_find_parts"><code>find_parts()</code></a> will return any part that matches
+the regexp, including multipart.  If you only want to see leaves of the
+tree (ie: parts that aren't multipart), set this to true (1).</p>
+</dd>
+<dd>
+<p>Recursive - By default, when <a href="#item_find_parts"><code>find_parts()</code></a> finds a multipart which has
+parts underneath it, it will recurse through all sub-children.  If set to 0,
+only look at the part and any direct children of the part.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_header"><code>header()</code></a></strong><br />
+</dt>
+<dd>
+Stores and retrieves headers from a specific MIME part.  The first
+parameter is the header name.  If there is no other parameter, the header
+is retrieved.  If there is a second parameter, the header is stored.
+</dd>
+<dd>
+<p>Header names are case-insensitive and are stored in both raw and
+decoded form.  Using header(), only the decoded form is retrievable.</p>
+</dd>
+<dd>
+<p>For retrieval, if <a href="#item_header"><code>header()</code></a> is called in an array context, an array will
+be returned with each header entry in a different element.  In a scalar
+context, the last specific header is returned.</p>
+</dd>
+<dd>
+<p>ie: If 'Subject' is specified as the header, and there are 2 Subject
+headers in a message, the last/bottom one in the message is returned in
+scalar context or both are returned in array context.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_raw_header"><code>raw_header()</code></a></strong><br />
+</dt>
+<dd>
+Retrieves the raw version of headers from a specific MIME part.  The only
+parameter is the header name.  Header names are case-insensitive.
+</dd>
+<dd>
+<p>For retrieval, if <a href="#item_raw_header"><code>raw_header()</code></a> is called in an array context, an array
+will be returned with each header entry in a different element.  In a
+scalar context, the last specific header is returned.</p>
+</dd>
+<dd>
+<p>ie: If 'Subject' is specified as the header, and there are 2 Subject
+headers in a message, the last/bottom one in the message is returned in
+scalar context or both are returned in array context.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_add_body_part"><code>add_body_part()</code></a></strong><br />
+</dt>
+<dd>
+Adds a Node child object to the current node object.
+</dd>
+<p></p>
+<dt><strong><a name="item_is_leaf"><code>is_leaf()</code></a></strong><br />
+</dt>
+<dd>
+Returns true if the tree node in question is a leaf of the tree (ie:
+has no children of its own).  Note: This function may return odd results
+unless the message has been mime parsed via _do_parse()!
+</dd>
+<p></p>
+<dt><strong><a name="item_raw"><code>raw()</code></a></strong><br />
+</dt>
+<dd>
+Return a reference to the the raw array.  Treat this as READ ONLY.
+</dd>
+<p></p>
+<dt><strong><a name="item_decode"><code>decode()</code></a></strong><br />
+</dt>
+<dd>
+If necessary, decode the part text as base64 or quoted-printable.
+The decoded text will be returned as a scalar.  An optional length
+parameter can be passed in which limits how much decoded data is returned.
+If the scalar isn't needed, call with ``0'' as a parameter.
+</dd>
+<p></p>
+<dt><strong><a name="item_rendered"><code>rendered()</code></a></strong><br />
+</dt>
+<dd>
+<code>render_text()</code> takes the given text/* type MIME part, and attempts to
+render it into a text scalar.  It will always render text/html, and will
+use a heuristic to determine if other text/* parts should be considered
+text/html.  Two scalars are returned: the rendered type (either text/html
+or whatever the original type was), and the rendered text.
+</dd>
+<p></p>
+<dt><strong><a name="item_visible_rendered"><code>visible_rendered()</code></a></strong><br />
+</dt>
+<dd>
+Render and return the visible text in this part.
+</dd>
+<p></p>
+<dt><strong><a name="item_invisible_rendered"><code>invisible_rendered()</code></a></strong><br />
+</dt>
+<dd>
+Render and return the invisible text in this part.
+</dd>
+<p></p>
+<dt><strong><a name="item_content_summary"><code>content_summary()</code></a></strong><br />
+</dt>
+<dd>
+Returns an array of scalars describing the mime parts of the message.
+Note: This function requires that the message be parsed first!
+</dd>
+<p></p>
+<dt><strong><a name="item_delete_header"><code>delete_header()</code></a></strong><br />
+</dt>
+<dd>
+Delete the specified header (decoded and raw) from the Node information.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_header"><code>get_header()</code></a></strong><br />
+</dt>
+<dd>
+Retrieve a specific header.  Will have a newline at the end and will be
+unfolded.  The first parameter is the header name (case-insensitive),
+and the second parameter (optional) is whether or not to return the
+raw header.
+</dd>
+<dd>
+<p>If <a href="#item_get_header"><code>get_header()</code></a> is called in an array context, an array will be returned
+with each header entry in a different element.  In a scalar context,
+the last specific header is returned.</p>
+</dd>
+<dd>
+<p>ie: If 'Subject' is specified as the header, and there are 2 Subject
+headers in a message, the last/bottom one in the message is returned in
+scalar context or both are returned in array context.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_all_headers"><code>get_all_headers()</code></a></strong><br />
+</dt>
+<dd>
+Retrieve all headers.  Each header will have a newline at the end and
+will be unfolded.  The first parameter (optional) is whether or not to
+return the raw headers, and the second parameter (optional) is whether
+or not to include the mbox separator.
+</dd>
+<dd>
+<p>If <code>get_all_header()</code> is called in an array context, an array will be
+returned with each header entry in a different element.  In a scalar
+context, the headers are returned in a single scalar.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_finish"><code>finish()</code></a></strong><br />
+</dt>
+<dd>
+Clean up the object so that it can be destroyed.
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_Message_Node.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,132 @@
+NAME
+    Mail::SpamAssassin::Message::Node - decode, render, and make available
+    MIME message parts
+
+SYNOPSIS
+DESCRIPTION
+    This module will encapsulate an email message and allow access to the
+    various MIME message parts.
+
+PUBLIC METHODS
+    new()
+        Generates an empty Node object and returns it. Typically only called
+        by functions in Message.
+
+    find_parts()
+        Used to search the tree for specific MIME parts. An array of
+        matching Node objects (pointers into the tree) is returned. The
+        parameters that can be passed in are (in order, all scalars):
+
+        Regexp - Used to match against each part's Content-Type header,
+        specifically the type and not the rest of the header. ie:
+        "Content-type: text/html; encoding=quoted-printable" has a type of
+        "text/html". If no regexp is specified, find_parts() will return an
+        empty array.
+
+        Only_leaves - By default, find_parts() will return any part that
+        matches the regexp, including multipart. If you only want to see
+        leaves of the tree (ie: parts that aren't multipart), set this to
+        true (1).
+
+        Recursive - By default, when find_parts() finds a multipart which
+        has parts underneath it, it will recurse through all sub-children.
+        If set to 0, only look at the part and any direct children of the
+        part.
+
+    header()
+        Stores and retrieves headers from a specific MIME part. The first
+        parameter is the header name. If there is no other parameter, the
+        header is retrieved. If there is a second parameter, the header is
+        stored.
+
+        Header names are case-insensitive and are stored in both raw and
+        decoded form. Using header(), only the decoded form is retrievable.
+
+        For retrieval, if header() is called in an array context, an array
+        will be returned with each header entry in a different element. In a
+        scalar context, the last specific header is returned.
+
+        ie: If 'Subject' is specified as the header, and there are 2 Subject
+        headers in a message, the last/bottom one in the message is returned
+        in scalar context or both are returned in array context.
+
+    raw_header()
+        Retrieves the raw version of headers from a specific MIME part. The
+        only parameter is the header name. Header names are
+        case-insensitive.
+
+        For retrieval, if raw_header() is called in an array context, an
+        array will be returned with each header entry in a different
+        element. In a scalar context, the last specific header is returned.
+
+        ie: If 'Subject' is specified as the header, and there are 2 Subject
+        headers in a message, the last/bottom one in the message is returned
+        in scalar context or both are returned in array context.
+
+    add_body_part()
+        Adds a Node child object to the current node object.
+
+    is_leaf()
+        Returns true if the tree node in question is a leaf of the tree (ie:
+        has no children of its own). Note: This function may return odd
+        results unless the message has been mime parsed via _do_parse()!
+
+    raw()
+        Return a reference to the the raw array. Treat this as READ ONLY.
+
+    decode()
+        If necessary, decode the part text as base64 or quoted-printable.
+        The decoded text will be returned as a scalar. An optional length
+        parameter can be passed in which limits how much decoded data is
+        returned. If the scalar isn't needed, call with "0" as a parameter.
+
+    rendered()
+        render_text() takes the given text/* type MIME part, and attempts to
+        render it into a text scalar. It will always render text/html, and
+        will use a heuristic to determine if other text/* parts should be
+        considered text/html. Two scalars are returned: the rendered type
+        (either text/html or whatever the original type was), and the
+        rendered text.
+
+    visible_rendered()
+        Render and return the visible text in this part.
+
+    invisible_rendered()
+        Render and return the invisible text in this part.
+
+    content_summary()
+        Returns an array of scalars describing the mime parts of the
+        message. Note: This function requires that the message be parsed
+        first!
+
+    delete_header()
+        Delete the specified header (decoded and raw) from the Node
+        information.
+
+    get_header()
+        Retrieve a specific header. Will have a newline at the end and will
+        be unfolded. The first parameter is the header name
+        (case-insensitive), and the second parameter (optional) is whether
+        or not to return the raw header.
+
+        If get_header() is called in an array context, an array will be
+        returned with each header entry in a different element. In a scalar
+        context, the last specific header is returned.
+
+        ie: If 'Subject' is specified as the header, and there are 2 Subject
+        headers in a message, the last/bottom one in the message is returned
+        in scalar context or both are returned in array context.
+
+    get_all_headers()
+        Retrieve all headers. Each header will have a newline at the end and
+        will be unfolded. The first parameter (optional) is whether or not
+        to return the raw headers, and the second parameter (optional) is
+        whether or not to include the mbox separator.
+
+        If get_all_header() is called in an array context, an array will be
+        returned with each header entry in a different element. In a scalar
+        context, the headers are returned in a single scalar.
+
+    finish()
+        Clean up the object so that it can be destroyed.
+

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::PerMsgLearner - per-message status</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#methods">METHODS</a></li>
+	<li><a href="#see_also">SEE ALSO</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::PerMsgLearner - per-message status (spam or not-spam)</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  my $spamtest = new Mail::SpamAssassin ({
+    'rules_filename'      =&gt; '/etc/spamassassin.rules',
+    'userprefs_filename'  =&gt; $ENV{HOME}.'/.spamassassin/user_prefs'
+  });
+  my $mail = $spamtest-&gt;parse();</pre>
+<pre>
+  my $status = $spamtest-&gt;learn($mail,$id,$isspam,$forget);
+  my $didlearn = $status-&gt;did_learn();
+  $status-&gt;finish();</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The Mail::SpamAssassin <code>learn()</code> method returns an object of this
+class.  This object encapsulates all the per-message state for
+the learning process.</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_did_learn">$didlearn = $status-&gt;<code>did_learn()</code></a></strong><br />
+</dt>
+<dd>
+Returns <code>1</code> if the message was learned from or forgotten succesfully.
+</dd>
+<p></p>
+<dt><strong><a name="item_finish">$status-&gt;<code>finish()</code></a></strong><br />
+</dt>
+<dd>
+Finish with the object.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>Mail::SpamAssassin</code>
+<code>spamassassin</code></p>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.txt?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.txt (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgLearner.txt Mon Oct 16 08:57:50 2006
@@ -0,0 +1,30 @@
+NAME
+    Mail::SpamAssassin::PerMsgLearner - per-message status (spam or
+    not-spam)
+
+SYNOPSIS
+      my $spamtest = new Mail::SpamAssassin ({
+        'rules_filename'      => '/etc/spamassassin.rules',
+        'userprefs_filename'  => $ENV{HOME}.'/.spamassassin/user_prefs'
+      });
+      my $mail = $spamtest->parse();
+
+      my $status = $spamtest->learn($mail,$id,$isspam,$forget);
+      my $didlearn = $status->did_learn();
+      $status->finish();
+
+DESCRIPTION
+    The Mail::SpamAssassin "learn()" method returns an object of this class.
+    This object encapsulates all the per-message state for the learning
+    process.
+
+METHODS
+    $didlearn = $status->did_learn()
+        Returns 1 if the message was learned from or forgotten succesfully.
+
+    $status->finish()
+        Finish with the object.
+
+SEE ALSO
+    "Mail::SpamAssassin" "spamassassin"
+

Added: spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgStatus.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgStatus.html?view=auto&rev=464529
==============================================================================
--- spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgStatus.html (added)
+++ spamassassin/site/full/3.1.x/doc/Mail_SpamAssassin_PerMsgStatus.html Mon Oct 16 08:57:50 2006
@@ -0,0 +1,466 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::PerMsgStatus - per-message status</title>
+<link rev="made" href="mailto:jm@apache.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#methods">METHODS</a></li>
+	<li><a href="#see_also">SEE ALSO</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::PerMsgStatus - per-message status (spam or not-spam)</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  my $spamtest = new Mail::SpamAssassin ({
+    'rules_filename'      =&gt; '/etc/spamassassin.rules',
+    'userprefs_filename'  =&gt; $ENV{HOME}.'/.spamassassin/user_prefs'
+  });
+  my $mail = $spamtest-&gt;parse();</pre>
+<pre>
+  my $status = $spamtest-&gt;check ($mail);</pre>
+<pre>
+  my $rewritten_mail;
+  if ($status-&gt;is_spam()) {
+    $rewritten_mail = $status-&gt;rewrite_mail ();
+  }
+  ...</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The Mail::SpamAssassin <a href="#item_check"><code>check()</code></a> method returns an object of this
+class.  This object encapsulates all the per-message state.</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_check">$status-&gt;check ()</a></strong><br />
+</dt>
+<dd>
+Runs the SpamAssassin rules against the message pointed to by the object.
+</dd>
+<p></p>
+<dt><strong><a name="item_learn">$status-&gt;<code>learn()</code></a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called.  If the score
+is outside a certain range around the threshold, ie. if the message is judged
+more-or-less definitely spam or definitely non-spam, it will be fed into
+SpamAssassin's learning systems (currently the naive Bayesian classifier),
+so that future similar mails will be caught.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_autolearn_points">$score = $status-&gt;<code>get_autolearn_points()</code></a></strong><br />
+</dt>
+<dd>
+Return the message's score as computed for auto-learning.  Certain tests are
+ignored:
+</dd>
+<dd>
+<pre>
+  - rules with tflags set to 'learn' (the Bayesian rules)</pre>
+</dd>
+<dd>
+<pre>
+  - rules with tflags set to 'userconf' (user white/black-listing rules, etc)</pre>
+</dd>
+<dd>
+<pre>
+  - rules with tflags set to 'noautolearn'</pre>
+</dd>
+<dd>
+<p>Also note that auto-learning occurs using scores from either scoreset 0 or 1,
+depending on what scoreset is used during message check.  It is likely that the
+message check and auto-learn scores will be different.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_head_only_points">$score = $status-&gt;<code>get_head_only_points()</code></a></strong><br />
+</dt>
+<dd>
+Return the message's score as computed for auto-learning, ignoring
+all rules except for header-based ones.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_learned_points">$score = $status-&gt;<code>get_learned_points()</code></a></strong><br />
+</dt>
+<dd>
+Return the message's score as computed for auto-learning, ignoring
+all rules except for learning-based ones.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_body_only_points">$score = $status-&gt;<code>get_body_only_points()</code></a></strong><br />
+</dt>
+<dd>
+Return the message's score as computed for auto-learning, ignoring
+all rules except for body-based ones.
+</dd>
+<p></p>
+<dt><strong><a name="item_is_spam">$isspam = $status-&gt;is_spam ()</a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called.  It will
+return 1 for mail determined likely to be spam, 0 if it does not seem
+spam-like.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_names_of_tests_hit">$list = $status-&gt;get_names_of_tests_hit ()</a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called. It will
+return a comma-separated string, listing all the symbolic test names
+of the tests which were trigged by the mail.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_names_of_subtests_hit">$list = $status-&gt;get_names_of_subtests_hit ()</a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called.  It will
+return a comma-separated string, listing all the symbolic test names of the
+meta-rule sub-tests which were trigged by the mail.  Sub-tests are the
+normally-hidden rules, which score 0 and have names beginning with two
+underscores, used in meta rules.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_score">$num = $status-&gt;get_score ()</a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called.  It will
+return the message's score.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_required_score">$num = $status-&gt;get_required_score ()</a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called.  It will
+return the score required for a mail to be considered spam.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_autolearn_status">$num = $status-&gt;get_autolearn_status ()</a></strong><br />
+</dt>
+<dd>
+After a mail message has been checked, this method can be called.  It will
+return one of the following strings depending on whether the mail was
+auto-learned or not: ``ham'', ``no'', ``spam'', ``disabled'', ``failed'', ``unavailable''.
+</dd>
+<p></p>
+<dt><strong><a name="item_get_report">$report = $status-&gt;get_report ()</a></strong><br />
+</dt>
+<dd>
+Deliver a ``spam report'' on the checked mail message.  This contains details of
+how many spam detection rules it triggered.
+</dd>
+<dd>
+<p>The report is returned as a multi-line string, with the lines separated by
+<code>\n</code> characters.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_content_preview">$preview = $status-&gt;get_content_preview ()</a></strong><br />
+</dt>
+<dd>
+Give a ``preview'' of the content.
+</dd>
+<dd>
+<p>This is returned as a multi-line string, with the lines separated by <code>\n</code>
+characters, containing a fully-decoded, safe, plain-text sample of the first
+few lines of the message body.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_message">$msg = $status-&gt;<code>get_message()</code></a></strong><br />
+</dt>
+<dd>
+Return the object representing the message being scanned.
+</dd>
+<p></p>
+<dt><strong><a name="item_rewrite_mail">$status-&gt;rewrite_mail ()</a></strong><br />
+</dt>
+<dd>
+Rewrite the mail message.  This will at minimum add headers, and at
+maximum MIME-encapsulate the message text, to reflect its spam or not-spam
+status.  The function will return a scalar of the rewritten message.
+</dd>
+<dd>
+<p>The actual modifications depend on the configuration (see
+<code>Mail::SpamAssassin::Conf</code> for more information).</p>
+</dd>
+<dd>
+<p>The possible modifications are as follows:</p>
+</dd>
+<dl>
+<dt><strong><a name="item_to_3a_2c_from_3a_and_subject_3a_modification_on_sp">To:, From: and Subject: modification on spam mails</a></strong><br />
+</dt>
+<dd>
+Depending on the configuration, the To: and From: lines can have a
+user-defined RFC 2822 comment appended for spam mail. The subject line
+may have a user-defined string prepended to it for spam mail.
+</dd>
+<p></p>
+<dt><strong><a name="item_x_2dspam_2d_2a_headers_for_all_mails">X-Spam-* headers for all mails</a></strong><br />
+</dt>
+<dd>
+Depending on the configuration, zero or more headers with names
+beginning with <code>X-Spam-</code> will be added to mail depending on whether
+it is spam or ham.
+</dd>
+<p></p>
+<dt><strong><a name="item_spam_message_with_report_safe">spam message with report_safe</a></strong><br />
+</dt>
+<dd>
+If report_safe is set to true (1), then spam messages are encapsulated
+into their own message/rfc822 MIME attachment without any modifications
+being made.
+</dd>
+<dd>
+<p>If report_safe is set to false (0), then the message will only have the
+above headers added/modified.</p>
+</dd>
+<p></p></dl>
+<dt><strong><a name="item_set_tag">$status-&gt;set_tag($tagname, $value)</a></strong><br />
+</dt>
+<dd>
+Set a template tag, as used in <code>add_header</code>, report templates, etc. This API
+is intended for use by plugins.   Tag names will be converted to an
+all-uppercase representation internally.
+</dd>
+<dd>
+<p><code>$value</code> can be a subroutine reference, which will be evaluated each time
+the template is expanded.  Note that perl supports closures, which means
+that variables set in the caller's scope can be accessed inside this <code>sub</code>.
+For example:</p>
+</dd>
+<dd>
+<pre>
+    my $text = &quot;hello world!&quot;;
+    $status-&gt;set_tag(&quot;FOO&quot;, sub {
+              return $text;
+            });</pre>
+</dd>
+<dd>
+<p>See <code>Mail::SpamAssassin::Conf</code>'s <code>TEMPLATE TAGS</code> section for more details on
+how template tags are used.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_tag">$string = $status-&gt;<code>get_tag($tagname)</code></a></strong><br />
+</dt>
+<dd>
+Get the current value of a template tag, as used in <code>add_header</code>, report
+templates, etc. This API is intended for use by plugins.  Tag names will be
+converted to an all-uppercase representation internally.  See
+<code>Mail::SpamAssassin::Conf</code>'s <code>TEMPLATE TAGS</code> section for more details on
+tags.
+</dd>
+<dd>
+<p><code>undef</code> will be returned if a tag by that name has not been defined.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_finish">$status-&gt;finish ()</a></strong><br />
+</dt>
+<dd>
+Indicate that this <code>$status</code> object is finished with, and can be destroyed.
+</dd>
+<dd>
+<p>If you are using SpamAssassin in a persistent environment, or checking many
+mail messages from one <code>Mail::SpamAssassin</code> factory, this method should be
+called to ensure Perl's garbage collection will clean up old status objects.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_current_eval_rule_name">$name = $status-&gt;<code>get_current_eval_rule_name()</code></a></strong><br />
+</dt>
+<dd>
+Return the name of the currently-running eval rule.  <code>undef</code> is
+returned if no eval rule is currently being run.  Useful for plugins
+to determine the current rule name while inside an eval test function
+call.
+</dd>
+<p></p>
+<dt><strong><a name="item_get">$status-&gt;get (header_name [, default_value])</a></strong><br />
+</dt>
+<dd>
+Returns a message header, pseudo-header, real name or address.
+<code>header_name</code> is the name of a mail header, such as 'Subject', 'To',
+etc.  If <code>default_value</code> is given, it will be used if the requested
+<code>header_name</code> does not exist.
+</dd>
+<dd>
+<p>Appending <code>:raw</code> to the header name will inhibit decoding of quoted-printable
+or base-64 encoded strings.</p>
+</dd>
+<dd>
+<p>Appending <code>:addr</code> to the header name will cause everything except
+the first email address to be removed from the header.  For example,
+all of the following will result in ``example@foo'':</p>
+</dd>
+<dl>
+<dt><strong><a name="item_example_40foo">example@foo</a></strong><br />
+</dt>
+<dt><strong><a name="item_foo">example@foo (Foo Blah)</a></strong><br />
+</dt>
+<dt><strong><a name="item_example_40foo_2c_example_40bar">example@foo, example@bar</a></strong><br />
+</dt>
+<dt><strong>display: example@foo (Foo Blah), example@bar ;</strong><br />
+</dt>
+<dt><strong><a name="item_foo_blah__3cexample_40foo_3e">Foo Blah &lt;example@foo&gt;</a></strong><br />
+</dt>
+<dt><strong><a name="item__22foo_blah_22__3cexample_40foo_3e">``Foo Blah'' &lt;example@foo&gt;</a></strong><br />
+</dt>
+<dt><strong><a name="item__22_27foo_blah_27_22__3cexample_40foo_3e">``'Foo Blah''' &lt;example@foo&gt;</a></strong><br />
+</dt>
+</dl>
+<p>Appending <code>:name</code> to the header name will cause everything except
+the first real name to be removed from the header.  For example,
+all of the following will result in ``Foo Blah''</p>
+<dl>
+<dt><strong>example@foo (Foo Blah)</strong><br />
+</dt>
+<dt><strong>example@foo (Foo Blah), example@bar</strong><br />
+</dt>
+<dt><strong>display: example@foo (Foo Blah), example@bar ;</strong><br />
+</dt>
+<dt><strong>Foo Blah &lt;example@foo&gt;</strong><br />
+</dt>
+<dt><strong>``Foo Blah'' &lt;example@foo&gt;</strong><br />
+</dt>
+<dt><strong>``'Foo Blah''' &lt;example@foo&gt;</strong><br />
+</dt>
+</dl>
+<p>There are several special pseudo-headers that can be specified:</p>
+<dl>
+<dt><strong><a name="item_all_can_be_used_to_mean_the_text_of_all_the_messag"><code>ALL</code> can be used to mean the text of all the message's headers.</a></strong><br />
+</dt>
+<dt><strong><a name="item_tocc_can_be_used_to_mean_the_contents_of_both_the_"><code>ToCc</code> can be used to mean the contents of both the 'To' and 'Cc'
+headers.</a></strong><br />
+</dt>
+<dt><strong><a name="item_envelopefrom_is_the_address_used_in_the__27mail_fr"><code>EnvelopeFrom</code> is the address used in the 'MAIL FROM:' phase of the SMTP
+transaction that delivered this message, if this data has been made available
+by the SMTP server.</a></strong><br />
+</dt>
+<dt><strong><a name="item_messageid_is_a_symbol_meaning_all_message_2did_27s"><code>MESSAGEID</code> is a symbol meaning all Message-Id's found in the message;
+some mailing list software moves the real 'Message-Id' to 'Resent-Message-Id'
+or 'X-Message-Id', then uses its own one in the 'Message-Id' header.  The value
+returned for this symbol is the text from all 3 headers, separated by newlines.</a></strong><br />
+</dt>
+<dt><strong><a name="item_x_2dspam_2drelays_2duntrusted_is_the_generated_met"><code>X-Spam-Relays-Untrusted</code> is the generated metadata of untrusted relays
+the message has passed through</a></strong><br />
+</dt>
+<dt><strong><a name="item_x_2dspam_2drelays_2dtrusted_is_the_generated_metad"><code>X-Spam-Relays-Trusted</code> is the generated metadata of trusted relays
+the message has passed through</a></strong><br />
+</dt>
+</dl>
+<dt><strong><a name="item_get_uri_list">$status-&gt;get_uri_list ()</a></strong><br />
+</dt>
+<dd>
+Returns an array of all unique URIs found in the message.  It takes
+a combination of the URIs found in the rendered (decoded and HTML
+stripped) body and the URIs found when parsing the HTML in the message.
+Will also set $status-&gt;{uri_list} (the array as returned by this function).
+</dd>
+<dd>
+<p>The returned array will include the ``raw'' URI as well as
+``slightly cooked'' versions.  For example, the single URI
+'http://%77&amp;#00119;%77.example.com/' will get turned into:
+( 'http://%77&amp;#00119;%77.example.com/', 'http://www.example.com/' )</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_get_uri_detail_list">$status-&gt;get_uri_detail_list ()</a></strong><br />
+</dt>
+<dd>
+Returns a hash reference of all unique URIs found in the message and
+various data about where the URIs were found in the message.  It takes a
+combination of the URIs found in the rendered (decoded and HTML stripped)
+body and the URIs found when parsing the HTML in the message.  Will also
+set $status-&gt;{uri_detail_list} (the hash reference as returned by this
+function).  This function will also set $status-&gt;{uri_domain_count} (count of
+unique domains).
+</dd>
+<dd>
+<p>The hash format looks something like this:</p>
+</dd>
+<dd>
+<pre>
+  raw_uri =&gt; {
+    types =&gt; { a =&gt; 1, img =&gt; 1, parsed =&gt; 1 },
+    cleaned =&gt; [ canonified_uri ],
+    anchor_text =&gt; [ &quot;click here&quot;, &quot;no click here&quot; ],
+    domains =&gt; { domain1 =&gt; 1, domain2 =&gt; 1 },
+  }</pre>
+</dd>
+<dd>
+<p><code>raw_uri</code> is whatever the URI was in the message itself
+(http://spamassassin.apache%2Eorg/).</p>
+</dd>
+<dd>
+<p><code>types</code> is a hash of the HTML tags (lowercase) which referenced
+the raw_uri.  <em>parsed</em> is a faked type which specifies that the
+raw_uri was seen in the rendered text.</p>
+</dd>
+<dd>
+<p><code>cleaned</code> is an array of the raw and canonified version of the raw_uri
+(http://spamassassin.apache%2Eorg/, <a href="http://spamassassin.apache.org/).">http://spamassassin.apache.org/).</a></p>
+</dd>
+<dd>
+<p><code>anchor_text</code> is an array of the anchor text (text between &lt;a&gt; and
+&lt;/a&gt;), if any, which linked to the URI.</p>
+</dd>
+<dd>
+<p><code>domains</code> is a hash of the domains found in the canonified URIs.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_clear_test_state">$status-&gt;<code>clear_test_state()</code></a></strong><br />
+</dt>
+<dd>
+Clear test state, including test log messages from <code>$status-&gt;test_log()</code>.
+</dd>
+<p></p>
+<dt><strong><a name="item_create_fulltext_tmpfile">$status-&gt;create_fulltext_tmpfile (fulltext_ref)</a></strong><br />
+</dt>
+<dd>
+This function creates a temporary file containing the passed scalar
+reference data (typically the full/pristine text of the message).
+This is typically used by external programs like pyzor and dccproc, to
+avoid hangs due to buffering issues.   Methods that need this, should
+call $self-&gt;<a href="#item_create_fulltext_tmpfile"><code>create_fulltext_tmpfile($fulltext)</code></a> to retrieve the temporary
+filename; it will be created if it has not already been.
+</dd>
+<dd>
+<p>Note: This can only be called once until $status-&gt;<a href="#item_delete_fulltext_tmpfile"><code>delete_fulltext_tmpfile()</code></a> is
+called.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_delete_fulltext_tmpfile">$status-&gt;delete_fulltext_tmpfile ()</a></strong><br />
+</dt>
+<dd>
+Will cleanup after a $status-&gt;<a href="#item_create_fulltext_tmpfile"><code>create_fulltext_tmpfile()</code></a> call.  Deletes the
+temporary file and uncaches the filename.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>Mail::SpamAssassin</code>
+<code>spamassassin</code>
+
+</p>
+
+</body>
+
+</html>