You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by km...@apache.org on 2015/04/29 19:04:11 UTC

svn commit: r1676792 [6/17] - in /spamassassin/site/full/3.4.x: ./ doc/

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,62 @@
+<?xml version="1.0" ?>
+<!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::Conf::LDAP - load SpamAssassin scores from LDAP database</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Conf::LDAP - load SpamAssassin scores from LDAP database</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  (see Mail::SpamAssassin)</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Mail::SpamAssassin is a module to identify spam using text analysis and
+several internet-based realtime blacklists.</p>
+<p>This class is used internally by SpamAssassin to load scores from an LDAP
+database.  Please refer to the <code>Mail::SpamAssassin</code> documentation for public
+interfaces.</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="load" class="item">$f-&gt;load ($username)</a></strong></dt>
+
+<dd>
+<p>Read configuration paramaters from LDAP server and parse scores from it.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_LDAP.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,20 @@
+NAME
+    Mail::SpamAssassin::Conf::LDAP - load SpamAssassin scores from LDAP
+    database
+
+SYNOPSIS
+      (see Mail::SpamAssassin)
+
+DESCRIPTION
+    Mail::SpamAssassin is a module to identify spam using text analysis and
+    several internet-based realtime blacklists.
+
+    This class is used internally by SpamAssassin to load scores from an
+    LDAP database. Please refer to the "Mail::SpamAssassin" documentation
+    for public interfaces.
+
+METHODS
+    $f->load ($username)
+        Read configuration paramaters from LDAP server and parse scores from
+        it.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,148 @@
+<?xml version="1.0" ?>
+<!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::Conf::Parser - parse SpamAssassin configuration</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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="#structure_of_a_config_block">STRUCTURE OF A CONFIG BLOCK</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Conf::Parser - parse SpamAssassin configuration</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  (see Mail::SpamAssassin)</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Mail::SpamAssassin is a module to identify spam using text analysis and
+several internet-based realtime blacklists.</p>
+<p>This class is used internally by SpamAssassin to parse its configuration files.
+Please refer to the <code>Mail::SpamAssassin</code> documentation for public interfaces.</p>
+<p>
+</p>
+<hr />
+<h1><a name="structure_of_a_config_block">STRUCTURE OF A CONFIG BLOCK</a></h1>
+<p>This is the structure of a config-setting block.  Each is a hashref which may
+contain these keys:</p>
+<dl>
+<dt><strong><a name="setting" class="item">setting</a></strong></dt>
+
+<dd>
+<p>the name of the setting it modifies, e.g. &quot;required_score&quot;. this also doubles
+as the default for 'command' (below). THIS IS REQUIRED.</p>
+</dd>
+<dt><strong><a name="command" class="item">command</a></strong></dt>
+
+<dd>
+<p>The command string used in the config file for this setting.  Optional;
+'setting' will be used for the command if this is omitted.</p>
+</dd>
+<dt><strong><a name="aliases" class="item">aliases</a></strong></dt>
+
+<dd>
+<p>An [aryref] of other aliases for the same command.  optional.</p>
+</dd>
+<dt><strong><a name="type" class="item">type</a></strong></dt>
+
+<dd>
+<p>The type of this setting:</p>
+<pre>
+ - $CONF_TYPE_NOARGS: must not have any argument, like &quot;clear_headers&quot;
+ - $CONF_TYPE_STRING: string
+ - $CONF_TYPE_NUMERIC: numeric value (float or int)
+ - $CONF_TYPE_BOOL: boolean (0/no or 1/yes)
+ - $CONF_TYPE_TEMPLATE: template, like &quot;report&quot;
+ - $CONF_TYPE_ADDRLIST: list of mail addresses, like &quot;whitelist_from&quot;
+ - $CONF_TYPE_HASH_KEY_VALUE: hash key/value pair, like &quot;describe&quot; or tflags
+ - $CONF_TYPE_STRINGLIST list of strings, stored as an array
+ - $CONF_TYPE_IPADDRLIST list of IP addresses, stored as an array of SA::NetSet
+ - $CONF_TYPE_DURATION a nonnegative time interval in seconds - a numeric value
+                      (float or int), optionally suffixed by a time unit (s, m,
+                      h, d, w), seconds are implied if unit is missing</pre>
+<p>If this is set, and a 'code' block does not already exist, a 'code' block is
+assigned based on the type.</p>
+<p>In addition, the SpamAssassin test suite will validate that the settings
+do not 'leak' between users.</p>
+<p>Note that <code>$CONF_TYPE_HASH_KEY_VALUE</code>-type settings require that the
+value be non-empty, otherwise they'll produce a warning message.</p>
+</dd>
+<dt><strong><a name="code" class="item">code</a></strong></dt>
+
+<dd>
+<p>A subroutine to deal with the setting.  ONE OF <strong>code</strong> OR <strong>type</strong> IS REQUIRED.
+The arguments passed to the function are <code>($self, $key, $value, $line)</code>,
+where $key is the setting (*not* the command), $value is the value string,
+and $line is the entire line.</p>
+<p>There are two special return values that the <strong>code</strong> subroutine may return
+to signal that there is an error in the configuration:</p>
+<p><code>$Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE</code> -- this setting requires
+that a value be set, but one was not provided.</p>
+<p><code>$Mail::SpamAssassin::Conf::INVALID_VALUE</code> -- this setting requires a value
+from a set of 'valid' values, but the user provided an invalid one.</p>
+<p><code>$Mail::SpamAssassin::Conf::INVALID_HEADER_FIELD_NAME</code> -- this setting
+requires a syntactically valid header field name, but the user provided
+an invalid one.</p>
+<p>Any other values -- including <code>undef</code> -- returned from the subroutine are
+considered to mean 'success'.</p>
+<p>It is good practice to set a 'type', if possible, describing how your settings
+are stored on the Conf object; this allows the SpamAssassin test suite to
+validate that the settings do not 'leak' between users.</p>
+</dd>
+<dt><strong><a name="default" class="item">default</a></strong></dt>
+
+<dd>
+<p>The default value for the setting.  may be omitted if the default value is a
+non-scalar type, which should be set in the Conf ctor.  note for path types:
+using &quot;__userstate__&quot; is recommended for defaults, as it allows
+Mail::SpamAssassin module users who set that configuration setting, to receive
+the correct values.</p>
+</dd>
+<dt><strong><a name="is_priv" class="item">is_priv</a></strong></dt>
+
+<dd>
+<p>Set to 1 if this setting requires 'allow_user_rules' when run from spamd.</p>
+</dd>
+<dt><strong><a name="is_admin" class="item">is_admin</a></strong></dt>
+
+<dd>
+<p>Set to 1 if this setting can only be set in the system-wide config when run
+from spamd.  (All settings can be used by local programs run directly by the
+user.)</p>
+</dd>
+<dt><strong><a name="is_frequent" class="item">is_frequent</a></strong></dt>
+
+<dd>
+<p>Set to 1 if this value occurs frequently in the config. this means it's looked
+up first for speed.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_Parser.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,102 @@
+NAME
+    Mail::SpamAssassin::Conf::Parser - parse SpamAssassin configuration
+
+SYNOPSIS
+      (see Mail::SpamAssassin)
+
+DESCRIPTION
+    Mail::SpamAssassin is a module to identify spam using text analysis and
+    several internet-based realtime blacklists.
+
+    This class is used internally by SpamAssassin to parse its configuration
+    files. Please refer to the "Mail::SpamAssassin" documentation for public
+    interfaces.
+
+STRUCTURE OF A CONFIG BLOCK
+    This is the structure of a config-setting block. Each is a hashref which
+    may contain these keys:
+
+    setting
+        the name of the setting it modifies, e.g. "required_score". this
+        also doubles as the default for 'command' (below). THIS IS REQUIRED.
+
+    command
+        The command string used in the config file for this setting.
+        Optional; 'setting' will be used for the command if this is omitted.
+
+    aliases
+        An [aryref] of other aliases for the same command. optional.
+
+    type
+        The type of this setting:
+
+         - $CONF_TYPE_NOARGS: must not have any argument, like "clear_headers"
+         - $CONF_TYPE_STRING: string
+         - $CONF_TYPE_NUMERIC: numeric value (float or int)
+         - $CONF_TYPE_BOOL: boolean (0/no or 1/yes)
+         - $CONF_TYPE_TEMPLATE: template, like "report"
+         - $CONF_TYPE_ADDRLIST: list of mail addresses, like "whitelist_from"
+         - $CONF_TYPE_HASH_KEY_VALUE: hash key/value pair, like "describe" or tflags
+         - $CONF_TYPE_STRINGLIST list of strings, stored as an array
+         - $CONF_TYPE_IPADDRLIST list of IP addresses, stored as an array of SA::NetSet
+         - $CONF_TYPE_DURATION a nonnegative time interval in seconds - a numeric value
+                              (float or int), optionally suffixed by a time unit (s, m,
+                              h, d, w), seconds are implied if unit is missing
+
+        If this is set, and a 'code' block does not already exist, a 'code'
+        block is assigned based on the type.
+
+        In addition, the SpamAssassin test suite will validate that the
+        settings do not 'leak' between users.
+
+        Note that $CONF_TYPE_HASH_KEY_VALUE-type settings require that the
+        value be non-empty, otherwise they'll produce a warning message.
+
+    code
+        A subroutine to deal with the setting. ONE OF code OR type IS
+        REQUIRED. The arguments passed to the function are "($self, $key,
+        $value, $line)", where $key is the setting (*not* the command),
+        $value is the value string, and $line is the entire line.
+
+        There are two special return values that the code subroutine may
+        return to signal that there is an error in the configuration:
+
+        $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE -- this setting
+        requires that a value be set, but one was not provided.
+
+        $Mail::SpamAssassin::Conf::INVALID_VALUE -- this setting requires a
+        value from a set of 'valid' values, but the user provided an invalid
+        one.
+
+        $Mail::SpamAssassin::Conf::INVALID_HEADER_FIELD_NAME -- this setting
+        requires a syntactically valid header field name, but the user
+        provided an invalid one.
+
+        Any other values -- including "undef" -- returned from the
+        subroutine are considered to mean 'success'.
+
+        It is good practice to set a 'type', if possible, describing how
+        your settings are stored on the Conf object; this allows the
+        SpamAssassin test suite to validate that the settings do not 'leak'
+        between users.
+
+    default
+        The default value for the setting. may be omitted if the default
+        value is a non-scalar type, which should be set in the Conf ctor.
+        note for path types: using "__userstate__" is recommended for
+        defaults, as it allows Mail::SpamAssassin module users who set that
+        configuration setting, to receive the correct values.
+
+    is_priv
+        Set to 1 if this setting requires 'allow_user_rules' when run from
+        spamd.
+
+    is_admin
+        Set to 1 if this setting can only be set in the system-wide config
+        when run from spamd. (All settings can be used by local programs run
+        directly by the user.)
+
+    is_frequent
+        Set to 1 if this value occurs frequently in the config. this means
+        it's looked up first for speed.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,62 @@
+<?xml version="1.0" ?>
+<!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::Conf::SQL - load SpamAssassin scores from SQL database</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Conf::SQL - load SpamAssassin scores from SQL database</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+  (see Mail::SpamAssassin)</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Mail::SpamAssassin is a module to identify spam using text analysis and
+several internet-based realtime blacklists.</p>
+<p>This class is used internally by SpamAssassin to load scores from an SQL
+database.  Please refer to the <code>Mail::SpamAssassin</code> documentation for public
+interfaces.</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="load" class="item">$f-&gt;load ($username)</a></strong></dt>
+
+<dd>
+<p>Read configuration paramaters from SQL database and parse scores from it.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Conf_SQL.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,20 @@
+NAME
+    Mail::SpamAssassin::Conf::SQL - load SpamAssassin scores from SQL
+    database
+
+SYNOPSIS
+      (see Mail::SpamAssassin)
+
+DESCRIPTION
+    Mail::SpamAssassin is a module to identify spam using text analysis and
+    several internet-based realtime blacklists.
+
+    This class is used internally by SpamAssassin to load scores from an SQL
+    database. Please refer to the "Mail::SpamAssassin" documentation for
+    public interfaces.
+
+METHODS
+    $f->load ($username)
+        Read configuration paramaters from SQL database and parse scores
+        from it.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,156 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="load_resolver" class="item">$res-&gt;<code>load_resolver()</code></a></strong></dt>
+
+<dd>
+<p>Load the <code>Net::DNS::Resolver</code> object.  Returns 0 if Net::DNS cannot be used,
+1 if it is available.</p>
+</dd>
+<dt><strong><a name="get_resolver" class="item">$resolver = $res-&gt;<code>get_resolver()</code></a></strong></dt>
+
+<dd>
+<p>Return the <code>Net::DNS::Resolver</code> object.</p>
+</dd>
+<dt><strong><a name="configured_nameservers" class="item">$res-&gt;<code>configured_nameservers()</code></a></strong></dt>
+
+<dd>
+<p>Get a list of nameservers as configured by dns_server directives
+or as provided by Net::DNS, typically from /etc/resolv.conf</p>
+</dd>
+<dt><strong><a name="available_nameservers" class="item">$res-&gt;<code>available_nameservers()</code></a></strong></dt>
+
+<dd>
+<p>Get or set a list of currently available nameservers,
+which is typically a known-to-be-good subset of configured nameservers</p>
+</dd>
+<dt><strong><a name="connect_sock" class="item">$res-&gt;<code>connect_sock()</code></a></strong></dt>
+
+<dd>
+<p>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>.</p>
+</dd>
+<dt><strong><a name="get_sock" class="item">$res-&gt;<code>get_sock()</code></a></strong></dt>
+
+<dd>
+<p>Return the <code>IO::Socket::INET</code> object used to communicate with
+the nameserver.</p>
+</dd>
+<dt><strong><a name="new_dns_packet" class="item">$packet = new_dns_packet ($domain, $type, $class)</a></strong></dt>
+
+<dd>
+<p>A wrapper for <code>Net::DNS::Packet::new()</code> which traps a die thrown by it.</p>
+<p>To use this, change calls to <code>Net::DNS::Resolver::bgsend</code> from:</p>
+<pre>
+    $res-&gt;bgsend($domain, $type);</pre>
+<p>to:</p>
+<pre>
+    $res-&gt;bgsend(Mail::SpamAssassin::DnsResolver::new_dns_packet($domain, $type, $class));</pre>
+</dd>
+<dt><strong><a name="bgsend" class="item">$id = $res-&gt;bgsend($domain, $type, $class, $cb)</a></strong></dt>
+
+<dd>
+<p>Quite similar to <code>Net::DNS::Resolver::bgsend</code>, except that when a reply
+packet eventually arrives, and <a href="#poll_responses"><code>poll_responses</code></a> is called, the callback
+sub reference <code>$cb</code> will be called.</p>
+<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>
+<p>The callback sub will be called with three arguments -- the packet that was
+delivered, and an id string that fingerprints the query packet and the expected
+reply. The third argument is a timestamp (Unix time, floating point), captured
+at the time the packet was collected. It is expected that a closure callback
+be used, like so:</p>
+<pre>
+  my $id = $self-&gt;{resolver}-&gt;bgsend($domain, $type, undef, sub {
+        my ($reply, $reply_id, $timestamp) = @_;
+        $self-&gt;got_a_reply ($reply, $reply_id);
+      });</pre>
+<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>
+<dt><strong><a name="poll_responses" class="item">$nfound = $res-&gt;<code>poll_responses()</code></a></strong></dt>
+
+<dd>
+<p>See if there are any <a href="#bgsend"><code>bgsend</code></a> reply packets ready, and return
+the number of such packets delivered to their callbacks.</p>
+</dd>
+<dt><strong><a name="bgabort" class="item">$res-&gt;<code>bgabort()</code></a></strong></dt>
+
+<dd>
+<p>Call this to release pending requests from memory, when aborting backgrounded
+requests, or when the scan is complete.
+<code>Mail::SpamAssassin::PerMsgStatus::check</code> calls this before returning.</p>
+</dd>
+<dt><strong><a name="send" class="item">$packet = $res-&gt;send($name, $type, $class)</a></strong></dt>
+
+<dd>
+<p>Emulates <a href="#send"><code>Net::DNS::Resolver::send()</code></a>.</p>
+<p>This subroutine is a simple synchronous leftover from SpamAssassin version
+3.3 and does not participate in packet query caching and callback grouping
+as implemented by AsyncLoop::bgsend_and_start_lookup().  As such it should
+be avoided for mainstream usage.</p>
+</dd>
+<dt><strong><a name="errorstring" class="item">$res-&gt;<code>errorstring()</code></a></strong></dt>
+
+<dd>
+<p>Little more than a stub for callers expecting this from <code>Net::DNS::Resolver</code>.</p>
+<p>If called immediately after a call to $res-&gt;send this will return
+<code>query timed out</code> if the $res-&gt;send DNS query timed out.  Otherwise 
+<code>unknown error or no error</code> will be returned.</p>
+<p>No other errors are reported.</p>
+</dd>
+<dt><strong><a name="finish_socket" class="item">$res-&gt;<code>finish_socket()</code></a></strong></dt>
+
+<dd>
+<p>Reset socket when done with it.</p>
+</dd>
+<dt><strong><a name="finish" class="item">$res-&gt;<code>finish()</code></a></strong></dt>
+
+<dd>
+<p>Clean up for destruction.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_DnsResolver.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,102 @@
+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->configured_nameservers()
+        Get a list of nameservers as configured by dns_server directives or
+        as provided by Net::DNS, typically from /etc/resolv.conf
+
+    $res->available_nameservers()
+        Get or set a list of currently available nameservers, which is
+        typically a known-to-be-good subset of configured 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 ($domain, $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($domain, $type);
+
+        to:
+
+            $res->bgsend(Mail::SpamAssassin::DnsResolver::new_dns_packet($domain, $type, $class));
+
+    $id = $res->bgsend($domain, $type, $class, $cb)
+        Quite similar to "Net::DNS::Resolver::bgsend", except that when a
+        reply 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 three arguments -- the packet
+        that was delivered, and an id string that fingerprints the query
+        packet and the expected reply. The third argument is a timestamp
+        (Unix time, floating point), captured at the time the packet was
+        collected. It is expected that a closure callback be used, like so:
+
+          my $id = $self->{resolver}->bgsend($domain, $type, undef, sub {
+                my ($reply, $reply_id, $timestamp) = @_;
+                $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" reply 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, or when the scan is complete.
+        "Mail::SpamAssassin::PerMsgStatus::check" calls this before
+        returning.
+
+    $packet = $res->send($name, $type, $class)
+        Emulates "Net::DNS::Resolver::send()".
+
+        This subroutine is a simple synchronous leftover from SpamAssassin
+        version 3.3 and does not participate in packet query caching and
+        callback grouping as implemented by
+        AsyncLoop::bgsend_and_start_lookup(). As such it should be avoided
+        for mainstream usage.
+
+    $res->errorstring()
+        Little more than a stub for callers expecting this from
+        "Net::DNS::Resolver".
+
+        If called immediately after a call to $res->send this will return
+        "query timed out" if the $res->send DNS query timed out. Otherwise
+        "unknown error or no error" will be returned.
+
+        No other errors are reported.
+
+    $res->finish_socket()
+        Reset socket when done with it.
+
+    $res->finish()
+        Clean up for destruction.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,130 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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 !$^S;
+  };</pre>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="add_facilities" class="item">add_facilities(facilities)</a></strong></dt>
+
+<dd>
+<p>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. Facility names are case-sensitive.</p>
+<p>If &quot;all&quot; is listed, then all debug facilities are implicitly enabled,
+except for those explicitly disabled.  A facility name may be preceded
+by a &quot;no&quot; (case-insensitive), which explicitly disables it, overriding
+the &quot;all&quot;.  For example: all,norules,noconfig,nodcc.  When facility names
+are given as an ordered list (array or scalar, not a hash), the last entry
+applies, e.g. 'nodcc,dcc,dcc,noddc' is equivalent to 'nodcc'.  Note that
+currently no facility name starts with a &quot;no&quot;, it is advised to keep this
+practice with newly added facility names to make life easier.</p>
+<p>Higher priority informational messages that are suitable for logging in
+normal circumstances are available with an area of &quot;info&quot;.  Some very
+verbose messages require the facility to be specifically enabled (see
+<a href="#would_log"><code>would_log</code></a> below).</p>
+</dd>
+<dt><strong><a name="log_message" class="item">log_message($level, @message)</a></strong></dt>
+
+<dd>
+<p>Log a message at a specific level.  Levels are specified as strings:
+&quot;warn&quot;, &quot;error&quot;, &quot;info&quot;, and &quot;dbg&quot;.  The first element of the message
+must be prefixed with a facility name followed directly by a colon.</p>
+</dd>
+<dt><strong><a name="dbg" class="item">dbg(&quot;facility: message&quot;)</a></strong></dt>
+
+<dd>
+<p>This is used for all low priority debugging messages.</p>
+</dd>
+<dt><strong><a name="info" class="item">info(&quot;facility: message&quot;)</a></strong></dt>
+
+<dd>
+<p>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.</p>
+</dd>
+<dt><strong><a name="add" class="item">add(method =&gt; 'syslog', socket =&gt; $socket, facility =&gt; $facility)</a></strong></dt>
+
+<dd>
+<p><code>socket</code> is the type the syslog (&quot;unix&quot; or &quot;inet&quot;).  <code>facility</code> is the
+syslog facility (typically &quot;mail&quot;).</p>
+</dd>
+<dt><strong>add(method =&gt; 'file', filename =&gt; $file)</strong></dt>
+
+<dd>
+<p><code>filename</code> is the name of the log file.</p>
+</dd>
+<dt><strong>add(method =&gt; 'stderr')</strong></dt>
+
+<dd>
+<p>No options are needed for stderr logging, just don't close stderr first.</p>
+</dd>
+<dt><strong><a name="remove" class="item">remove(method)</a></strong></dt>
+
+<dd>
+<p>Remove a logging method.  Only the method name needs to be passed as a
+scalar.</p>
+</dd>
+<dt><strong><a name="would_log" class="item">would_log($level, $facility)</a></strong></dt>
+
+<dd>
+<p>Returns false if a message at the given level and with the given facility
+would not 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.</p>
+<p>The facility argument is optional.</p>
+</dd>
+<dt><strong><a name="close_log" class="item"><code>close_log()</code></a></strong></dt>
+
+<dd>
+<p>Close all logs.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,75 @@
+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 !$^S;
+      };
+
+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. Facility names are case-sensitive.
+
+        If "all" is listed, then all debug facilities are implicitly
+        enabled, except for those explicitly disabled. A facility name may
+        be preceded by a "no" (case-insensitive), which explicitly disables
+        it, overriding the "all". For example: all,norules,noconfig,nodcc.
+        When facility names are given as an ordered list (array or scalar,
+        not a hash), the last entry applies, e.g. 'nodcc,dcc,dcc,noddc' is
+        equivalent to 'nodcc'. Note that currently no facility name starts
+        with a "no", it is advised to keep this practice with newly added
+        facility names to make life easier.
+
+        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 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 false if a message at the given level and with the given
+        facility would not 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.4.x/doc/Mail_SpamAssassin_Logger_File.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_File.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_File.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_File.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,45 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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.4.x/doc/Mail_SpamAssassin_Logger_File.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_File.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_File.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_File.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,7 @@
+NAME
+    Mail::SpamAssassin::Logger::File - log to file
+
+SYNOPSIS
+      loadplugin     Mail::SpamAssassin::Logger::File
+
+DESCRIPTION

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,45 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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.4.x/doc/Mail_SpamAssassin_Logger_Stderr.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Stderr.txt Wed Apr 29 17:04:09 2015
@@ -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.4.x/doc/Mail_SpamAssassin_Logger_Syslog.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Syslog.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Syslog.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Syslog.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,45 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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.4.x/doc/Mail_SpamAssassin_Logger_Syslog.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Syslog.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Syslog.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Logger_Syslog.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,7 @@
+NAME
+    Mail::SpamAssassin::Logger::Syslog - log to syslog
+
+SYNOPSIS
+      loadplugin     Mail::SpamAssassin::Logger::Syslog
+
+DESCRIPTION

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,186 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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__non_public">PARSING METHODS, NON-PUBLIC</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="new" class="item"><code>new()</code></a></strong></dt>
+
+<dd>
+<p>Creates a Mail::SpamAssassin::Message object.  Takes a hash reference
+as a parameter.  The used hash key/value pairs are as follows:</p>
+<p><code>message</code> is either undef (which will use STDIN), a scalar - a string
+containing an entire message, a reference to such string, an array reference
+of the message with one line per array element, or either a file glob
+or an IO::File object which holds the entire contents of the message.</p>
+<p>Note: The message is expected to generally be in <a href="http://www.ietf.org/rfc/rfc2822.txt" class="rfc">RFC 2822</a> format, optionally
+including an mbox message separator line (the &quot;From &quot; line) as the first line.</p>
+<p><code>parse_now</code> specifies whether or not to create the MIME tree
+at object-creation time or later as necessary.</p>
+<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>
+<p><code>subparse</code> specifies how many MIME recursion levels should be parsed.
+Defaults to 20.</p>
+</dd>
+<dt><strong><a name="find_parts" class="item"><code>find_parts()</code></a></strong></dt>
+
+<dd>
+<p>Used to search the tree for specific MIME parts.  See
+<em>Mail::SpamAssassin::Message::Node</em> for more details.</p>
+</dd>
+<dt><strong><a name="get_pristine_header" class="item"><code>get_pristine_header()</code></a></strong></dt>
+
+<dd>
+<p>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.</p>
+<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>
+<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>
+<p>Btw, returning the last header field (not the first) happens to be consistent
+with DKIM signatures, which search for and cover multiple header fields
+bottom-up according to the 'h' tag. Let's keep it this way.</p>
+<p>Note: the returned header will include the ending newline and any embedded
+whitespace folding.</p>
+</dd>
+<dt><strong><a name="get_mbox_separator" class="item"><code>get_mbox_separator()</code></a></strong></dt>
+
+<dd>
+<p>Returns the mbox separator found in the message, or undef if there
+wasn't one.</p>
+</dd>
+<dt><strong><a name="get_body" class="item"><code>get_body()</code></a></strong></dt>
+
+<dd>
+<p>Returns an array of the pristine message body, one line per array element.</p>
+</dd>
+<dt><strong><a name="get_pristine" class="item"><code>get_pristine()</code></a></strong></dt>
+
+<dd>
+<p>Returns a scalar of the entire pristine message.</p>
+</dd>
+<dt><strong><a name="get_pristine_body" class="item"><code>get_pristine_body()</code></a></strong></dt>
+
+<dd>
+<p>Returns a scalar of the pristine message body.</p>
+</dd>
+<dt><strong><a name="extract_message_metadata" class="item"><code>extract_message_metadata($permsgstatus)</code></a></strong></dt>
+
+<dt><strong><a name="get_metadata" class="item">$str = <code>get_metadata($hdr)</code></a></strong></dt>
+
+<dt><strong><a name="put_metadata" class="item">put_metadata($hdr, $text)</a></strong></dt>
+
+<dt><strong><a name="delete_metadata" class="item"><code>delete_metadata($hdr)</code></a></strong></dt>
+
+<dt><strong><a name="get_all_metadata" class="item">$str = <code>get_all_metadata()</code></a></strong></dt>
+
+<dt><strong><a name="finish_metadata" class="item"><code>finish_metadata()</code></a></strong></dt>
+
+<dd>
+<p>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.</p>
+</dd>
+<dt><strong><a name="finish" class="item"><code>finish()</code></a></strong></dt>
+
+<dd>
+<p>Clean up an object so that it can be destroyed.</p>
+</dd>
+<dt><strong><a name="receive_date" class="item"><code>receive_date()</code></a></strong></dt>
+
+<dd>
+<p>Return a time_t value with the received date of the current message,
+or current time if received time couldn't be determined.</p>
+</dd>
+</dl>
+<p>
+</p>
+<hr />
+<h1><a name="parsing_methods__non_public">PARSING METHODS, NON-PUBLIC</a></h1>
+<p>These methods take a <a href="http://www.ietf.org/rfc/rfc2822.txt" class="rfc">RFC2822</a>-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="parse_body" class="item"><code>parse_body()</code></a></strong></dt>
+
+<dd>
+<p><a href="#parse_body"><code>parse_body()</code></a> passes the body part that was passed in onto the
+correct part parser, either <a href="#_parse_multipart"><code>_parse_multipart()</code></a> for multipart/* parts,
+or <a href="#_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.</p>
+<p>For multipart messages, the first call to <a href="#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="#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>
+<dt><strong><a name="_parse_multipart" class="item"><code>_parse_multipart()</code></a></strong></dt>
+
+<dd>
+<p>Generate a root node, and for each child part call <a href="#parse_body"><code>parse_body()</code></a>
+to generate the tree.</p>
+</dd>
+<dt><strong><a name="_parse_normal" class="item"><code>_parse_normal()</code></a></strong></dt>
+
+<dd>
+<p>Generate a leaf node and add it to the parent.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,131 @@
+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 - a
+        string containing an entire message, a reference to such string, an
+        array reference of the message with one line per array element, or
+        either a file glob or an IO::File object 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.
+
+    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.
+
+        Btw, returning the last header field (not the first) happens to be
+        consistent with DKIM signatures, which search for and cover multiple
+        header fields bottom-up according to the 'h' tag. Let's keep it this
+        way.
+
+        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($permsgstatus)
+    $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.4.x/doc/Mail_SpamAssassin_Message_Metadata.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,65 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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 &quot;metadata&quot; 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, &quot;X-Language&quot; =&gt; &quot;en&quot;.  This is the general form for simple
+  metadata that's useful as Bayes tokens, can be added to marked-up
+  messages using &quot;add_header&quot;, 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="new" class="item"><code>new()</code></a></strong></dt>
+
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Metadata.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,25 @@
+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
+    new()
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,192 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="new" class="item"><code>new()</code></a></strong></dt>
+
+<dd>
+<p>Generates an empty Node object and returns it.  Typically only called
+by functions in Message.</p>
+</dd>
+<dt><strong><a name="find_parts" class="item"><code>find_parts()</code></a></strong></dt>
+
+<dd>
+<p>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):</p>
+<p>Regexp - Used to match against each part's Content-Type header,
+specifically the type and not the rest of the header.  ie: &quot;Content-type:
+text/html; encoding=quoted-printable&quot; has a type of &quot;text/html&quot;.  If no
+regexp is specified, <a href="#find_parts"><code>find_parts()</code></a> will return an empty array.</p>
+<p>Only_leaves - By default, <a href="#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>
+<p>Recursive - By default, when <a href="#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>
+<dt><strong><a name="header" class="item"><code>header()</code></a></strong></dt>
+
+<dd>
+<p>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.</p>
+<p>Header names are case-insensitive and are stored in both raw and
+decoded form.  Using <a href="#header"><code>header()</code></a>, only the decoded form is retrievable.</p>
+<p>For retrieval, if <a href="#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>
+<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>
+<dt><strong><a name="raw_header" class="item"><code>raw_header()</code></a></strong></dt>
+
+<dd>
+<p>Retrieves the raw version of headers from a specific MIME part.  The only
+parameter is the header name.  Header names are case-insensitive.</p>
+<p>For retrieval, if <a href="#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>
+<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>
+<dt><strong><a name="add_body_part" class="item"><code>add_body_part()</code></a></strong></dt>
+
+<dd>
+<p>Adds a Node child object to the current node object.</p>
+</dd>
+<dt><strong><a name="is_leaf" class="item"><code>is_leaf()</code></a></strong></dt>
+
+<dd>
+<p>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()!</p>
+</dd>
+<dt><strong><a name="raw" class="item"><code>raw()</code></a></strong></dt>
+
+<dd>
+<p>Return a reference to the the raw array.  Treat this as READ ONLY.</p>
+</dd>
+<dt><strong><a name="decode" class="item"><code>decode()</code></a></strong></dt>
+
+<dd>
+<p>If necessary, decode the part text as base64 or quoted-printable.
+The decoded text will be returned as a scalar string.  An optional length
+parameter can be passed in which limits how much decoded data is returned.
+If the scalar isn't needed, call with &quot;0&quot; as a parameter.</p>
+</dd>
+<dt><strong><a name="rendered" class="item"><code>rendered()</code></a></strong></dt>
+
+<dd>
+<p><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.</p>
+</dd>
+<dt><strong><a name="set_rendered" class="item">set_rendered($text, $type)</a></strong></dt>
+
+<dd>
+<p>Set the rendered text and type for the given part.  If type is not
+specified, and text is a defined value, a default of 'text/plain' is used.
+This can be used, for instance, to render non-text parts using plugins.</p>
+</dd>
+<dt><strong><a name="visible_rendered" class="item"><code>visible_rendered()</code></a></strong></dt>
+
+<dd>
+<p>Render and return the visible text in this part.</p>
+</dd>
+<dt><strong><a name="invisible_rendered" class="item"><code>invisible_rendered()</code></a></strong></dt>
+
+<dd>
+<p>Render and return the invisible text in this part.</p>
+</dd>
+<dt><strong><a name="content_summary" class="item"><code>content_summary()</code></a></strong></dt>
+
+<dd>
+<p>Returns an array of scalars describing the mime parts of the message.
+Note: This function requires that the message be parsed first!</p>
+</dd>
+<dt><strong><a name="delete_header" class="item"><code>delete_header()</code></a></strong></dt>
+
+<dd>
+<p>Delete the specified header (decoded and raw) from the Node information.</p>
+</dd>
+<dt><strong><a name="get_header" class="item"><code>get_header()</code></a></strong></dt>
+
+<dd>
+<p>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.</p>
+<p>If <a href="#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>
+<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>
+<p>Btw, returning the last header field (not the first) happens to be consistent
+with DKIM signatures, which search for and cover multiple header fields
+bottom-up according to the 'h' tag. Let's keep it this way.</p>
+</dd>
+<dt><strong><a name="get_all_headers" class="item"><code>get_all_headers()</code></a></strong></dt>
+
+<dd>
+<p>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.</p>
+<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>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Message_Node.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,141 @@
+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 string. 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.
+
+    set_rendered($text, $type)
+        Set the rendered text and type for the given part. If type is not
+        specified, and text is a defined value, a default of 'text/plain' is
+        used. This can be used, for instance, to render non-text parts using
+        plugins.
+
+    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.
+
+        Btw, returning the last header field (not the first) happens to be
+        consistent with DKIM signatures, which search for and cover multiple
+        header fields bottom-up according to the 'h' tag. Let's keep it this
+        way.
+
+    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.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,80 @@
+<?xml version="1.0" ?>
+<!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>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="did_learn" class="item">$didlearn = $status-&gt;<code>did_learn()</code></a></strong></dt>
+
+<dd>
+<p>Returns <code>1</code> if the message was learned from or forgotten successfully.</p>
+</dd>
+<dt><strong><a name="finish" class="item">$status-&gt;<code>finish()</code></a></strong></dt>
+
+<dd>
+<p>Finish with the object.</p>
+</dd>
+</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.4.x/doc/Mail_SpamAssassin_PerMsgLearner.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_PerMsgLearner.txt Wed Apr 29 17:04:09 2015
@@ -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 successfully.
+
+    $status->finish()
+        Finish with the object.
+
+SEE ALSO
+    "Mail::SpamAssassin" "spamassassin"
+