Here is a work in progress update to SpamAssassin 3.4.0. Looking for any feedback / testing.
Index: Makefile =================================================================== RCS file: /home/cvs/ports/mail/p5-Mail-SpamAssassin/Makefile,v retrieving revision 1.81 diff -u -p -u -p -r1.81 Makefile --- Makefile 11 Mar 2013 11:23:53 -0000 1.81 +++ Makefile 18 Feb 2014 02:31:26 -0000 @@ -2,11 +2,10 @@ COMMENT= mailfilter to identify and mark spam -VER= 3.3.2 +VER= 3.4.0 DISTNAME= Mail-SpamAssassin-${VER} PKGNAME= p5-${DISTNAME:S/-rc/rc/} -REVISION= 6 -RULESNAME= Mail-SpamAssassin-rules-${VER}-r1104058.tar.gz +RULESNAME= Mail-SpamAssassin-rules-${VER}.r1565117.tgz CATEGORIES= mail perl5 DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${RULESNAME} @@ -29,14 +28,14 @@ COMMON_DEPENDS= www/p5-HTML-Parser>=3.3 mail/p5-Mail-DKIM>=0.31 \ net/p5-Net-DNS>=0.34 \ net/p5-NetAddr-IP \ - net/p5-IO-Socket-INET6 \ + net/p5-IO-Socket-IP \ security/p5-IO-Socket-SSL \ www/p5-libwww BUILD_DEPENDS= ${COMMON_DEPENDS} RUN_DEPENDS= ${COMMON_DEPENDS} \ p5-Mail-SPF-*|p5-Mail-SPF-Query-*:mail/p5-Mail-SPF \ - net/p5-IP-Country \ + net/curl \ security/gnupg \ devel/re2c Index: distinfo =================================================================== RCS file: /home/cvs/ports/mail/p5-Mail-SpamAssassin/distinfo,v retrieving revision 1.36 diff -u -p -u -p -r1.36 distinfo --- distinfo 23 Jun 2011 17:32:46 -0000 1.36 +++ distinfo 18 Feb 2014 01:20:39 -0000 @@ -1,10 +1,4 @@ -MD5 (Mail-SpamAssassin-3.3.2.tar.bz2) = JT+Py+tsi/yrnROYZcGkBA== -MD5 (Mail-SpamAssassin-rules-3.3.2-r1104058.tar.gz) = cvgHVJnGGFGMaMc5nwK0WA== -RMD160 (Mail-SpamAssassin-3.3.2.tar.bz2) = rhZNGxdyWQyiYUksXN43SF1k7Zw= -RMD160 (Mail-SpamAssassin-rules-3.3.2-r1104058.tar.gz) = IoQ3JXBaypp8dz2cylDW6zDKKVw= -SHA1 (Mail-SpamAssassin-3.3.2.tar.bz2) = 84SANSk1/ju4SaJ6UmFeQA3ufWY= -SHA1 (Mail-SpamAssassin-rules-3.3.2-r1104058.tar.gz) = oZnV8PjCOB49/kIeendDVrP/2ks= -SHA256 (Mail-SpamAssassin-3.3.2.tar.bz2) = xyObS07wS6Xi1a7bkVaFAUbtP6R8iPCgdX8I4i+TogU= -SHA256 (Mail-SpamAssassin-rules-3.3.2-r1104058.tar.gz) = 6jb9Sf5oELIWGWM4OjBWpYShadSmW8U2KGCG/+G3aZA= -SIZE (Mail-SpamAssassin-3.3.2.tar.bz2) = 1006577 -SIZE (Mail-SpamAssassin-rules-3.3.2-r1104058.tar.gz) = 258995 +SHA256 (Mail-SpamAssassin-3.4.0.tar.bz2) = VTs5uulptLoghUwKD6HroqaqD04QO1MODaThUs3ORxQ= +SHA256 (Mail-SpamAssassin-rules-3.4.0.r1565117.tgz) = cCjc4fzABLmzAWGBaj2NYmggxzqiWPM6S+j1LnmQFX8= +SIZE (Mail-SpamAssassin-3.4.0.tar.bz2) = 1065544 +SIZE (Mail-SpamAssassin-rules-3.4.0.r1565117.tgz) = 247283 Index: patches/patch-lib_Mail_SpamAssassin_Util_DependencyInfo_pm =================================================================== RCS file: patches/patch-lib_Mail_SpamAssassin_Util_DependencyInfo_pm diff -N patches/patch-lib_Mail_SpamAssassin_Util_DependencyInfo_pm --- patches/patch-lib_Mail_SpamAssassin_Util_DependencyInfo_pm 23 Jun 2011 17:32:46 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,20 +0,0 @@ -$OpenBSD: patch-lib_Mail_SpamAssassin_Util_DependencyInfo_pm,v 1.2 2011/06/23 17:32:46 sthen Exp $ - -appease makewhatis - ---- lib/Mail/SpamAssassin/Util/DependencyInfo.pm.orig Tue Jun 7 00:59:16 2011 -+++ lib/Mail/SpamAssassin/Util/DependencyInfo.pm Wed Jun 22 14:54:40 2011 -@@ -27,6 +27,13 @@ loadplugin Mail:SpamAssassin::Util::DependencyInfo - - =cut - -+=head1 NAME -+ -+Mail::SpamAssassin::Util::DependencyInfo - Helper code to debug dependencies and their versions. -+ -+=cut -+ -+ - package Mail::SpamAssassin::Util::DependencyInfo; - - use strict; Index: patches/patch-lib_Mail_SpamAssassin_Util_RegistrarBoundaries_pm =================================================================== RCS file: patches/patch-lib_Mail_SpamAssassin_Util_RegistrarBoundaries_pm diff -N patches/patch-lib_Mail_SpamAssassin_Util_RegistrarBoundaries_pm --- patches/patch-lib_Mail_SpamAssassin_Util_RegistrarBoundaries_pm 23 Jun 2011 17:32:46 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,17 +0,0 @@ -$OpenBSD: patch-lib_Mail_SpamAssassin_Util_RegistrarBoundaries_pm,v 1.2 2011/06/23 17:32:46 sthen Exp $ - -appease makewhatis - ---- lib/Mail/SpamAssassin/Util/RegistrarBoundaries.pm.orig Tue Jun 7 00:59:16 2011 -+++ lib/Mail/SpamAssassin/Util/RegistrarBoundaries.pm Wed Jun 22 14:54:40 2011 -@@ -24,6 +24,10 @@ Mail::SpamAssassin::Util::RegistrarBoundaries - domain - - =cut - -+=head1 -+Mail::SpamAssassin::Util::RegistrarBoundaries - split domains at registry boundaries -+=cut -+ - package Mail::SpamAssassin::Util::RegistrarBoundaries; - - use strict; Index: patches/patch-spamc_libspamc_c =================================================================== RCS file: patches/patch-spamc_libspamc_c diff -N patches/patch-spamc_libspamc_c --- patches/patch-spamc_libspamc_c 25 Jun 2012 22:12:30 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,33 +0,0 @@ -$OpenBSD: patch-spamc_libspamc_c,v 1.1 2012/06/25 22:12:30 sthen Exp $ - -Remove the SSLv2 support. - ---- spamc/libspamc.c.orig Mon Jun 25 08:00:22 2012 -+++ spamc/libspamc.c Mon Jun 25 08:01:45 2012 -@@ -1202,14 +1202,10 @@ int message_filter(struct transport *tp, const char *u - if (flags & SPAMC_USE_SSL) { - #ifdef SPAMC_SSL - SSLeay_add_ssl_algorithms(); -- if ((flags & SPAMC_SSLV2) && (flags & SPAMC_SSLV3)) { -- meth = TLSv1_client_method(); /* both flag bits on means use TLSv1 */ -- } else if (flags & SPAMC_SSLV2) { -- meth = SSLv2_client_method(); -- } else if (flags & SPAMC_SSLV3) { -- meth = SSLv3_client_method(); -+ if (flags & SPAMC_TLSV1) { -+ meth = TLSv1_client_method(); - } else { -- meth = SSLv23_client_method(); /* no flag bits, default SSLv23 */ -+ meth = SSLv3_client_method(); /* default */ - } - SSL_load_error_strings(); - ctx = SSL_CTX_new(meth); -@@ -1597,7 +1593,7 @@ int message_tell(struct transport *tp, const char *use - if (flags & SPAMC_USE_SSL) { - #ifdef SPAMC_SSL - SSLeay_add_ssl_algorithms(); -- meth = SSLv2_client_method(); -+ meth = SSLv3_client_method(); - SSL_load_error_strings(); - ctx = SSL_CTX_new(meth); - #else Index: patches/patch-spamc_libspamc_h =================================================================== RCS file: patches/patch-spamc_libspamc_h diff -N patches/patch-spamc_libspamc_h --- patches/patch-spamc_libspamc_h 25 Jun 2012 22:12:30 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,15 +0,0 @@ -$OpenBSD: patch-spamc_libspamc_h,v 1.1 2012/06/25 22:12:30 sthen Exp $ - -Remove the SSLv2 support. - ---- spamc/libspamc.h.orig Mon Jun 25 07:59:36 2012 -+++ spamc/libspamc.h Mon Jun 25 08:00:16 2012 -@@ -119,7 +119,7 @@ - /* Jan 1, 2007 sidney: added SSL protocol versions */ - /* no flags means use default of SSL_v23 */ - /* Set both flags to specify TSL_v1 */ --#define SPAMC_SSLV2 (1<<18) -+#define SPAMC_TLSV1 (1<<18) - #define SPAMC_SSLV3 (1<<17) - - /* Nov 30, 2006 jm: add -z, zlib support */ Index: patches/patch-spamc_spamc_c =================================================================== RCS file: patches/patch-spamc_spamc_c diff -N patches/patch-spamc_spamc_c --- patches/patch-spamc_spamc_c 25 Jun 2012 22:12:30 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,27 +0,0 @@ -$OpenBSD: patch-spamc_spamc_c,v 1.1 2012/06/25 22:12:30 sthen Exp $ - -Remove the SSLv2 support. - ---- spamc/spamc.c.orig Mon Jun 25 07:57:51 2012 -+++ spamc/spamc.c Mon Jun 25 07:59:14 2012 -@@ -359,17 +359,11 @@ read_args(int argc, char **argv, - case 'S': - { - flags |= SPAMC_USE_SSL; -- if (!spamc_optarg || (strcmp(spamc_optarg,"sslv23") == 0)) { -- /* this is the default */ -+ if (!spamc_optarg || (strcmp(spamc_optarg,"sslv3") == 0)) { -+ flags |= SPAMC_SSLV3; - } -- else if (strcmp(spamc_optarg,"sslv2") == 0) { -- flags |= SPAMC_SSLV2; -- } -- else if (strcmp(spamc_optarg,"sslv3") == 0) { -- flags |= SPAMC_SSLV3; -- } - else if (strcmp(spamc_optarg,"tlsv1") == 0) { -- flags |= (SPAMC_SSLV2 | SPAMC_SSLV3); -+ flags |= SPAMC_TLSV1; - } - else { - libspamc_log(flags, LOG_ERR, "Please specify a legal ssl version (%s)", spamc_optarg); Index: patches/patch-spamc_spamc_pod =================================================================== RCS file: patches/patch-spamc_spamc_pod diff -N patches/patch-spamc_spamc_pod --- patches/patch-spamc_spamc_pod 25 Jun 2012 22:12:30 -0000 1.5 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,19 +0,0 @@ -$OpenBSD: patch-spamc_spamc_pod,v 1.5 2012/06/25 22:12:30 sthen Exp $ - -Remove the SSLv2 support. - ---- spamc/spamc.pod.orig Mon Jun 25 08:04:55 2012 -+++ spamc/spamc.pod Mon Jun 25 08:05:37 2012 -@@ -181,10 +181,8 @@ The default is 1 second. - - If spamc was built with support for SSL, encrypt data to and from the - spamd process with SSL; spamd must support SSL as well. --I<sslversion> specifies the SSL protocol version to use, one of --C<sslv2>, C<sslv3>, C<tlsv1>, or C<sslv23>. The default, C<sslv23>, causes --spamc to use a SSLv2 hello handshake then negotiate use of SSLv3 or TLSv1 --protocol if the spamd server can accept it. -+I<sslversion> specifies the SSL protocol version to use, either -+C<sslv3>, or C<tlsv1>. The default, is C<sslv3>. - - =item B<-t> I<timeout>, B<--timeout>=I<timeout> - Index: patches/patch-spamd_spamd_raw =================================================================== RCS file: patches/patch-spamd_spamd_raw diff -N patches/patch-spamd_spamd_raw --- patches/patch-spamd_spamd_raw 25 Jun 2012 22:12:30 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,35 +0,0 @@ -$OpenBSD: patch-spamd_spamd_raw,v 1.3 2012/06/25 22:12:30 sthen Exp $ - -Remove the SSLv2 support. - ---- spamd/spamd.raw.orig Mon Jun 25 08:06:20 2012 -+++ spamd/spamd.raw Mon Jun 25 08:07:32 2012 -@@ -717,8 +717,8 @@ sub compose_listen_info_string { - $sslport = ( getservbyname($sslport, 'tcp') )[2]; - die "spamd: invalid ssl-port: $opt{'port'}\n" unless $sslport; - } -- $sslversion = $opt{'ssl-version'} || 'sslv23'; -- if ($sslversion !~ /^(?:sslv([23]|23)|(tlsv1))$/) { -+ $sslversion = $opt{'ssl-version'} || 'sslv3'; -+ if ($sslversion !~ /^(?:sslv3|tlsv1)$/) { - die "spamd: invalid ssl-version: $opt{'ssl-version'}\n"; - } - -@@ -3341,12 +3341,11 @@ more details. - - =item B<--ssl-version>=I<sslversion> - --Specify the SSL protocol version to use, one of --B<sslv2>, B<sslv3>, B<tlsv1>, or B<sslv23>. --The default, B<sslv23>, is the most flexible, accepting a SSLv2 or higher --hello handshake, then negotiating use of SSLv3 or TLSv1 protocol if the client --can accept it. --Specifying B<--ssl-version> implies B<--ssl>. -+Specify the SSL protocol version to use, one of B<sslv3> or B<tlsv1>. -+The default, B<sslv3>, is the most flexible, accepting a SSLv3 or -+higher hello handshake, then negotiating use of SSLv3 or TLSv1 -+protocol if the client can accept it. Specifying B<--ssl-version> -+implies B<--ssl>. - - =item B<--server-key> I<keyfile> - Index: patches/patch-t_spamd_ssl_v23_t =================================================================== RCS file: patches/patch-t_spamd_ssl_v23_t diff -N patches/patch-t_spamd_ssl_v23_t --- patches/patch-t_spamd_ssl_v23_t 16 Oct 2013 22:29:50 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,35 +0,0 @@ -$OpenBSD: patch-t_spamd_ssl_v23_t,v 1.1 2013/10/16 22:29:50 bluhm Exp $ - -SSLv2 support has been removed from OpenSSL and Net::SSLeay - ---- t/spamd_ssl_v23.t Tue Jun 7 01:59:19 2011 -+++ /dev/null Wed Oct 16 21:54:20 2013 -@@ -1,28 +0,0 @@ --#!/usr/bin/perl -- --use lib '.'; use lib 't'; --use SATest; sa_t_init("spamd_sslv23"); --use Test; plan tests => (($SKIP_SPAMD_TESTS || !$SSL_AVAILABLE) ? 0 : 9); -- --exit if ($SKIP_SPAMD_TESTS || !$SSL_AVAILABLE); -- --# --------------------------------------------------------------------------- -- --%patterns = ( -- --q{ Return-Path: sb55s...@yahoo.com}, 'firstline', --q{ Subject: There yours for FREE!}, 'subj', --q{ X-Spam-Status: Yes, score=}, 'status', --q{ X-Spam-Flag: YES}, 'flag', --q{ X-Spam-Level: **********}, 'stars', --q{ TEST_ENDSNUMS}, 'endsinnums', --q{ TEST_NOREALNAME}, 'noreal', --q{ This must be the very last line}, 'lastline', -- -- --); -- --ok (sdrun ("-L --ssl --ssl-version=sslv23 --server-key data/etc/testhost.key --server-cert data/etc/testhost.cert", -- "--ssl=sslv23 < data/spam/001", -- \&patterns_run_cb)); --ok_all_patterns(); Index: patches/patch-t_spamd_ssl_v2_t =================================================================== RCS file: patches/patch-t_spamd_ssl_v2_t diff -N patches/patch-t_spamd_ssl_v2_t --- patches/patch-t_spamd_ssl_v2_t 13 Dec 2011 08:52:54 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,35 +0,0 @@ -$OpenBSD: patch-t_spamd_ssl_v2_t,v 1.1 2011/12/13 08:52:54 bluhm Exp $ - -SSLv2 support has been removed from OpenSSL and Net::SSLeay - ---- t/spamd_ssl_v2.t Tue Jun 7 01:59:19 2011 -+++ /dev/null Fri Dec 9 23:29:26 2011 -@@ -1,28 +0,0 @@ --#!/usr/bin/perl -- --use lib '.'; use lib 't'; --use SATest; sa_t_init("spamd_sslv2"); --use Test; plan tests => (($SKIP_SPAMD_TESTS || !$SSL_AVAILABLE) ? 0 : 9); -- --exit if ($SKIP_SPAMD_TESTS || !$SSL_AVAILABLE); -- --# --------------------------------------------------------------------------- -- --%patterns = ( -- --q{ Return-Path: sb55s...@yahoo.com}, 'firstline', --q{ Subject: There yours for FREE!}, 'subj', --q{ X-Spam-Status: Yes, score=}, 'status', --q{ X-Spam-Flag: YES}, 'flag', --q{ X-Spam-Level: **********}, 'stars', --q{ TEST_ENDSNUMS}, 'endsinnums', --q{ TEST_NOREALNAME}, 'noreal', --q{ This must be the very last line}, 'lastline', -- -- --); -- --ok (sdrun ("-L --ssl --ssl-version=sslv2 --server-key data/etc/testhost.key --server-cert data/etc/testhost.cert", -- "--ssl=sslv2 < data/spam/001", -- \&patterns_run_cb)); --ok_all_patterns(); Index: pkg/PLIST =================================================================== RCS file: /home/cvs/ports/mail/p5-Mail-SpamAssassin/pkg/PLIST,v retrieving revision 1.32 diff -u -p -u -p -r1.32 PLIST --- pkg/PLIST 21 Sep 2011 08:02:07 -0000 1.32 +++ pkg/PLIST 18 Feb 2014 02:06:23 -0000 @@ -26,6 +26,7 @@ ${P5SITE}/Mail/SpamAssassin/BayesStore/B ${P5SITE}/Mail/SpamAssassin/BayesStore/DBM.pm ${P5SITE}/Mail/SpamAssassin/BayesStore/MySQL.pm ${P5SITE}/Mail/SpamAssassin/BayesStore/PgSQL.pm +${P5SITE}/Mail/SpamAssassin/BayesStore/Redis.pm ${P5SITE}/Mail/SpamAssassin/BayesStore/SDBM.pm ${P5SITE}/Mail/SpamAssassin/BayesStore/SQL.pm ${P5SITE}/Mail/SpamAssassin/Client.pm @@ -67,6 +68,7 @@ ${P5SITE}/Mail/SpamAssassin/Plugin/ASN.p ${P5SITE}/Mail/SpamAssassin/Plugin/AWL.pm ${P5SITE}/Mail/SpamAssassin/Plugin/AccessDB.pm ${P5SITE}/Mail/SpamAssassin/Plugin/AntiVirus.pm +${P5SITE}/Mail/SpamAssassin/Plugin/AskDNS.pm ${P5SITE}/Mail/SpamAssassin/Plugin/AutoLearnThreshold.pm ${P5SITE}/Mail/SpamAssassin/Plugin/Bayes.pm ${P5SITE}/Mail/SpamAssassin/Plugin/BodyEval.pm @@ -116,6 +118,7 @@ ${P5SITE}/Mail/SpamAssassin/Util/Progres ${P5SITE}/Mail/SpamAssassin/Util/RegistrarBoundaries.pm ${P5SITE}/Mail/SpamAssassin/Util/ScopedTimer.pm ${P5SITE}/Mail/SpamAssassin/Util/TieOneStringHash.pm +${P5SITE}/Mail/SpamAssassin/Util/TinyRedis.pm ${P5SITE}/spamassassin-run.pod @man man/man1/sa-awl.1 @man man/man1/sa-compile.1 @@ -135,6 +138,7 @@ ${P5SITE}/spamassassin-run.pod @man man/man3p/Mail::SpamAssassin::BayesStore::BDB.3p @man man/man3p/Mail::SpamAssassin::BayesStore::MySQL.3p @man man/man3p/Mail::SpamAssassin::BayesStore::PgSQL.3p +@man man/man3p/Mail::SpamAssassin::BayesStore::Redis.3p @man man/man3p/Mail::SpamAssassin::BayesStore::SQL.3p @man man/man3p/Mail::SpamAssassin::Client.3p @man man/man3p/Mail::SpamAssassin::Conf.3p @@ -157,12 +161,14 @@ ${P5SITE}/spamassassin-run.pod @man man/man3p/Mail::SpamAssassin::Plugin::AWL.3p @man man/man3p/Mail::SpamAssassin::Plugin::AccessDB.3p @man man/man3p/Mail::SpamAssassin::Plugin::AntiVirus.3p +@man man/man3p/Mail::SpamAssassin::Plugin::AskDNS.3p @man man/man3p/Mail::SpamAssassin::Plugin::AutoLearnThreshold.3p @man man/man3p/Mail::SpamAssassin::Plugin::Bayes.3p @man man/man3p/Mail::SpamAssassin::Plugin::BodyRuleBaseExtractor.3p @man man/man3p/Mail::SpamAssassin::Plugin::Check.3p @man man/man3p/Mail::SpamAssassin::Plugin::DCC.3p @man man/man3p/Mail::SpamAssassin::Plugin::DKIM.3p +@man man/man3p/Mail::SpamAssassin::Plugin::DNSEval.3p @man man/man3p/Mail::SpamAssassin::Plugin::Hashcash.3p @man man/man3p/Mail::SpamAssassin::Plugin::MIMEHeader.3p @man man/man3p/Mail::SpamAssassin::Plugin::OneLineBodyRuleType.3p @@ -227,6 +233,8 @@ share/examples/SpamAssassin/v320.pre @sample ${CONFDIR}/v320.pre share/examples/SpamAssassin/v330.pre @sample ${CONFDIR}/v330.pre +share/examples/SpamAssassin/v340.pre +@sample ${CONFDIR}/v340.pre @owner _spamdaemon @group _spamdaemon @sample ${LOCALSTATEDIR}/ @@ -235,6 +243,7 @@ share/examples/SpamAssassin/v330.pre @group share/spamassassin/ share/spamassassin/10_default_prefs.cf +share/spamassassin/10_hasbase.cf share/spamassassin/20_advance_fee.cf share/spamassassin/20_aux_tlds.cf share/spamassassin/20_body_tests.cf @@ -248,6 +257,7 @@ share/spamassassin/20_freemail_domains.c share/spamassassin/20_head_tests.cf share/spamassassin/20_html_tests.cf share/spamassassin/20_imageinfo.cf +share/spamassassin/20_mailspike.cf share/spamassassin/20_meta_tests.cf share/spamassassin/20_net_tests.cf share/spamassassin/20_phrases.cf Index: pkg/README =================================================================== RCS file: /home/cvs/ports/mail/p5-Mail-SpamAssassin/pkg/README,v retrieving revision 1.2 diff -u -p -u -p -r1.2 README --- pkg/README 22 Apr 2012 11:41:55 -0000 1.2 +++ pkg/README 18 Feb 2014 02:07:15 -0000 @@ -40,7 +40,6 @@ If you do not want to use procmail, plea http://spamassassin.apache.org/doc.html and the documentation for any other software you use to implement spamassassin (MailScanner, etc). - Customizing =========== The spam filtering is not perfect. But since the feedback is very -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.