# SpamAssassin rules file: body tests # # Please don't modify this file as your changes will be overwritten with # the next update. Use /etc/mail/spamassassin/local.cf instead. # See 'perldoc Mail::SpamAssassin::Conf' for details. # # Note: body tests are run with long lines, so be sure to limit the # size of searches; use /.{0,30}/ instead of /.*/ to avoid huge # search times. # # Note: If you are adding a rule which looks for a phrase in the body # (as most of them do), please add it to rules/20_phrases.cf instead. # # <@LICENSE> # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to you under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at: # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # </@LICENSE> # ########################################################################### require_version 3.004001 ########################################################################### # GTUBE test - the generic test for UBE. body GTUBE /XJS\*C4JDBQADN1\.NSBN3\*2IDNEN\*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL\*C\.34X/ describe GTUBE Generic Test for Unsolicited Bulk Email tflags GTUBE userconf noautolearn ########################################################################### # this seems to be the new fashion (as of Jul 5 2002). base64-encoded # parts need to be stripped before this match body TRACKER_ID /^[a-z0-9]{6,24}[-_a-z0-9]{12,36}[a-z0-9]{6,24}\s*\z/is describe TRACKER_ID Incorporates a tracking ID number body WEIRD_QUOTING /[\042\223\224\262\263\271]{2}\S{0,16}[\042\223\224\262\263\271]{2}/ describe WEIRD_QUOTING Weird repeated double-quotation marks ########################################################################### # multipart/alternative has very good accuracy, other multipart types are # similar to MIME_HTML_ONLY so they don't need a separate rule header __CTYPE_MULTIPART_ALT Content-Type =~ /multipart\/alternative/i meta MIME_HTML_ONLY_MULTI (__CTYPE_MULTIPART_ALT && MIME_HTML_ONLY) describe MIME_HTML_ONLY_MULTI Multipart message only has text/html MIME parts # note: __HIGHBITS is used in rules/20_html_tests.cf, HTML_CHARSET_FARAWAY meta MIME_CHARSET_FARAWAY (__MIME_CHARSET_FARAWAY && __HIGHBITS) describe MIME_CHARSET_FARAWAY MIME character set indicates foreign language tflags MIME_CHARSET_FARAWAY userconf ########################################################################### # duncf body EMAIL_ROT13 /\b[a-z(\]-]+\^[a-z-]+\([a-z]{2,3}\b/ describe EMAIL_ROT13 Body contains a ROT13-encoded email address test EMAIL_ROT13 ok qhabs^ebtref(pbz test EMAIL_ROT13 ok zxrggyre^riv-vap(pbz test EMAIL_ROT13 fail duncf-nospam@rogers.com # this could use more work body __LONGWORDS_A /\b(?:[a-z]{8,}[\s\.]+){6}/ body __LONGWORDS_B /\b(?:[a-z]{6,}[\s\.]+){9}/ body __LONGWORDS_C /\b(?:[a-z]{5,}[\s\.]+){10}/ meta LONGWORDS (__LONGWORDS_A + __LONGWORDS_B + __LONGWORDS_C > 1) describe LONGWORDS Long string of long words ########################################################################### ifplugin Mail::SpamAssassin::Plugin::BodyEval # This rule uses a simple algorithm to determine if the text and html # parts of an multipart/alternative message are different. body MPART_ALT_DIFF eval:multipart_alternative_difference('99', '100') describe MPART_ALT_DIFF HTML and text parts are different body MPART_ALT_DIFF_COUNT eval:multipart_alternative_difference_count('3', '1') describe MPART_ALT_DIFF_COUNT HTML and text parts are different body BLANK_LINES_80_90 eval:check_blank_line_ratio('80','90','4') describe BLANK_LINES_80_90 Message body has 80-90% blank lines # it's the ratio of spaces to non-spaces in each paragraph. apparently # messages where generally there are lots of spaces mean the message is spam. # 8.532 10.6051 0.1897 0.982 0.75 0.01 T_VERTICAL_WORDS_TVD_1 # bug 6149: avoid common .jp false positives header __SUBJECT_UTF8_B_ENCODED Subject:raw =~ /=\?UTF-?8\?B\?/i body __TVD_SPACE_RATIO eval:tvd_vertical_words('0','10') meta TVD_SPACE_RATIO (__TVD_SPACE_RATIO && !__ISO_2022_JP_DELIM && !__SUBJECT_UTF8_B_ENCODED && !__HIGHBITS) endif ########################################################################### ifplugin Mail::SpamAssassin::Plugin::MIMEEval # 0.767 0.9097 0.0000 1.000 0.84 1.00 MULTIPART_ALT_NON_TEXT body MULTIPART_ALT_NON_TEXT eval:check_ma_non_text() body CHARSET_FARAWAY eval:check_for_faraway_charset() describe CHARSET_FARAWAY Character set indicates a foreign language tflags CHARSET_FARAWAY userconf # these tests doesn't actually use rawbody since rawbody isn't raw enough; # they must be written very carefully to avoid modifying the original content # MIME Content-Transfer-Encoding control rules rawbody __MIME_BASE64 eval:check_for_mime('mime_base64_count') describe __MIME_BASE64 Includes a base64 attachment rawbody __MIME_QP eval:check_for_mime('mime_qp_count') describe __MIME_QP Includes a quoted-printable attachment rawbody MIME_BASE64_BLANKS eval:check_for_mime('mime_base64_blanks') describe MIME_BASE64_BLANKS Extra blank lines in base64 encoding rawbody MIME_BASE64_TEXT eval:check_for_mime('mime_base64_encoded_text') describe MIME_BASE64_TEXT Message text disguised using base64 encoding body MISSING_MIME_HB_SEP eval:check_msg_parse_flags('missing_mime_head_body_separator') describe MISSING_MIME_HB_SEP Missing blank line between MIME header and body body MIME_HTML_MOSTLY eval:check_mime_multipart_ratio('0.00','0.01') describe MIME_HTML_MOSTLY Multipart message mostly text/html MIME # Steve Linford via Charlie Watts: good test! body MIME_HTML_ONLY eval:check_for_mime_html_only() describe MIME_HTML_ONLY Message only has text/html MIME parts rawbody MIME_QP_LONG_LINE eval:check_for_mime('mime_qp_long_line') describe MIME_QP_LONG_LINE Quoted-printable line longer than 76 chars rawbody __MIME_CHARSET_FARAWAY eval:check_for_mime('mime_faraway_charset') body MIME_BAD_ISO_CHARSET eval:check_for_mime('mime_bad_iso_charset') describe MIME_BAD_ISO_CHARSET MIME character set is an unknown ISO charset endif ########################################################################### ifplugin Mail::SpamAssassin::Plugin::URIEval body HTTPS_IP_MISMATCH eval:check_https_ip_mismatch() describe HTTPS_IP_MISMATCH IP to HTTPS link found in HTML body URI_TRUNCATED eval:check_uri_truncated() describe URI_TRUNCATED Message contained a URI which was truncated endif
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
10_default_prefs.cf | File | 8.48 KB | 0644 |
|
10_hasbase.cf | File | 2.39 KB | 0644 |
|
20_advance_fee.cf | File | 7.43 KB | 0644 |
|
20_aux_tlds.cf | File | 36.44 KB | 0644 |
|
20_body_tests.cf | File | 6.84 KB | 0644 |
|
20_compensate.cf | File | 1.85 KB | 0644 |
|
20_dnsbl_tests.cf | File | 9.78 KB | 0644 |
|
20_drugs.cf | File | 14.73 KB | 0644 |
|
20_dynrdns.cf | File | 11.12 KB | 0644 |
|
20_fake_helo_tests.cf | File | 8.81 KB | 0644 |
|
20_freemail.cf | File | 2.97 KB | 0644 |
|
20_freemail_domains.cf | File | 40.32 KB | 0644 |
|
20_freemail_mailcom_domains.cf | File | 4.38 KB | 0644 |
|
20_head_tests.cf | File | 26.01 KB | 0644 |
|
20_html_tests.cf | File | 10.43 KB | 0644 |
|
20_imageinfo.cf | File | 5.18 KB | 0644 |
|
20_mailspike.cf | File | 2.86 KB | 0644 |
|
20_meta_tests.cf | File | 3.37 KB | 0644 |
|
20_net_tests.cf | File | 1.84 KB | 0644 |
|
20_pdfinfo.cf | File | 15.46 KB | 0644 |
|
20_phrases.cf | File | 7.93 KB | 0644 |
|
20_porn.cf | File | 2.01 KB | 0644 |
|
20_ratware.cf | File | 16.15 KB | 0644 |
|
20_uri_tests.cf | File | 5.62 KB | 0644 |
|
20_vbounce.cf | File | 18.82 KB | 0644 |
|
23_bayes.cf | File | 2.94 KB | 0644 |
|
25_accessdb.cf | File | 1.51 KB | 0644 |
|
25_antivirus.cf | File | 1.5 KB | 0644 |
|
25_asn.cf | File | 1.51 KB | 0644 |
|
25_dcc.cf | File | 2.8 KB | 0644 |
|
25_dkim.cf | File | 5.12 KB | 0644 |
|
25_dnswl.cf | File | 2.97 KB | 0644 |
|
25_hashcash.cf | File | 2.86 KB | 0644 |
|
25_pyzor.cf | File | 1.47 KB | 0644 |
|
25_razor2.cf | File | 3.08 KB | 0644 |
|
25_replace.cf | File | 11.07 KB | 0644 |
|
25_spf.cf | File | 4.3 KB | 0644 |
|
25_textcat.cf | File | 1.73 KB | 0644 |
|
25_uribl.cf | File | 16.1 KB | 0644 |
|
30_text_de.cf | File | 27.12 KB | 0644 |
|
30_text_fr.cf | File | 19.94 KB | 0644 |
|
30_text_it.cf | File | 1.82 KB | 0644 |
|
30_text_nl.cf | File | 20.98 KB | 0644 |
|
30_text_pl.cf | File | 17.39 KB | 0644 |
|
30_text_pt_br.cf | File | 44.1 KB | 0644 |
|
50_scores.cf | File | 37.46 KB | 0644 |
|
60_adsp_override_dkim.cf | File | 9.12 KB | 0644 |
|
60_awl.cf | File | 1.29 KB | 0644 |
|
60_shortcircuit.cf | File | 2.27 KB | 0644 |
|
60_txrep.cf | File | 1.31 KB | 0644 |
|
60_whitelist.cf | File | 5.87 KB | 0644 |
|
60_whitelist_auth.cf | File | 33.97 KB | 0644 |
|
60_whitelist_dkim.cf | File | 6.4 KB | 0644 |
|
60_whitelist_spf.cf | File | 3.57 KB | 0644 |
|
60_whitelist_subject.cf | File | 1.87 KB | 0644 |
|
72_active.cf | File | 265.76 KB | 0644 |
|
72_scores.cf | File | 13.03 KB | 0644 |
|
73_sandbox_manual_scores.cf | File | 2.79 KB | 0644 |
|
MIRRORED.BY | File | 1.37 KB | 0644 |
|
STATISTICS-set0-72_scores.cf.txt | File | 1.46 KB | 0644 |
|
STATISTICS-set1-72_scores.cf.txt | File | 1.46 KB | 0644 |
|
STATISTICS-set2-72_scores.cf.txt | File | 0 B | 0644 |
|
STATISTICS-set3-72_scores.cf.txt | File | 0 B | 0644 |
|
languages | File | 99.1 KB | 0644 |
|
local.cf | File | 3.06 KB | 0644 |
|
regression_tests.cf | File | 2.71 KB | 0644 |
|
sa-update-pubkey.txt | File | 4.67 KB | 0644 |
|
user_prefs.template | File | 1.83 KB | 0644 |
|