1 /**************************************************************** 2 * Licensed to the Apache Software Foundation (ASF) under one * 3 * or more contributor license agreements. See the NOTICE file * 4 * distributed with this work for additional information * 5 * regarding copyright ownership. The ASF licenses this file * 6 * to you under the Apache License, Version 2.0 (the * 7 * "License"); you may not use this file except in compliance * 8 * with the License. You may obtain a copy of the License at * 9 * * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, * 13 * software distributed under the License is distributed on an * 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 15 * KIND, either express or implied. See the License for the * 16 * specific language governing permissions and limitations * 17 * under the License. * 18 ****************************************************************/ 19 20 21 22 package org.apache.james.transport.matchers; 23 24 import javax.mail.MessagingException; 25 26 import org.apache.mailet.base.RFC2822Headers; 27 import org.apache.oro.text.regex.MalformedPatternException; 28 29 /** 30 * This is based on a sample filter.cfg for a Netscape Mail Server to stop 31 * spam. 32 * 33 */ 34 public class NESSpamCheck extends GenericRegexMatcher { 35 protected Object NESPatterns[][] = {{RFC2822Headers.RECEIVED, "GAA.*-0600.*EST"}, 36 {RFC2822Headers.RECEIVED, "XAA.*-0700.*EDT"}, 37 {RFC2822Headers.RECEIVED, "xxxxxxxxxxxxxxxxxxxxx"}, 38 {RFC2822Headers.RECEIVED, "untrace?able"}, 39 {RFC2822Headers.RECEIVED, "from (baby|bewellnet|kllklk) "}, 40 {RFC2822Headers.TO, "Friend@public\\.com"}, 41 {RFC2822Headers.TO, "user@the[-_]internet"}, 42 {RFC2822Headers.DATE, "/[0-9]+/.+[AP]M.+Time"}, 43 {RFC2822Headers.SUBJECT, "^\\(?ADV?[:;)]"}, 44 {RFC2822Headers.MESSAGE_ID, "<>"}, 45 {RFC2822Headers.MESSAGE_ID_VARIATION, "<>"}, 46 {RFC2822Headers.MESSAGE_ID_VARIATION, "<(419\\.43|989\\.28)"}, 47 {"X-MimeOLE", "MimeOLE V[^0-9]"}, 48 //Added 20-Jun-1999. Appears to be broken spamware. 49 {"MIME-Version", "1.0From"}, 50 //Added 28-July-1999. Check X-Mailer for spamware. 51 {"X-Mailer", "DiffondiCool"}, 52 {"X-Mailer", "Emailer Platinum"}, 53 {"X-Mailer", "eMerge"}, 54 {"X-Mailer", "Crescent Internet Tool"}, 55 //Added 4-Apr-2000. Check X-Mailer for Cybercreek Avalanche 56 {"X-Mailer", "Avalanche"}, 57 //Added 21-Oct-1999. Subject contains 20 or more consecutive spaces 58 {"Subject", " "}, 59 //Added 31-Mar-2000. Invalid headers from MyGuestBook.exe CGI spamware 60 {"MessageID", "<.+>"}, 61 {"X-References", "0[A-Z0-9]+, 0[A-Z0-9]+$"}, 62 {"X-Other-References", "0[A-Z0-9]+$"}, 63 {"X-See-Also", "0[A-Z0-9]+$"}, 64 //Updated 28-Apr-1999. Check for "Sender", "Resent-From", or "Resent-By" 65 // before "X-UIDL". If found, then exit. 66 {RFC2822Headers.SENDER, ".+"}, 67 {RFC2822Headers.RESENT_FROM, ".+"}, 68 {"Resent-By", ".+"}, 69 //Updated 19-May-1999. Check for "X-Mozilla-Status" before "X-UIDL". 70 {"X-Mozilla-Status", ".+"}, 71 //Updated 20-Jul-1999. Check for "X-Mailer: Internet Mail Service" 72 // before "X-UIDL". 73 {"X-Mailer", "Internet Mail Service"}, 74 //Updated 25-Oct-1999. Check for "X-ID" before "X-UIDL". 75 {"X-ID", ".+"}, 76 //X-UIDL is a POP3 header that should normally not be seen 77 {"X-UIDL", ".*"}, 78 //Some headers are valid only for the Pegasus Mail client. So first check 79 //for Pegasus header and exit if found. If not found, check for 80 //invalid headers: "Comments: Authenticated sender", "X-PMFLAGS" and "X-pmrqc". 81 {"X-mailer", "Pegasus"}, 82 //Added 27-Aug-1999. Pegasus now uses X-Mailer instead of X-mailer. 83 {"X-Mailer", "Pegasus"}, 84 //Added 25-Oct-1999. Check for X-Confirm-Reading-To. 85 {"X-Confirm-Reading-To", ".+"}, 86 //Check for invalid Pegasus headers 87 {RFC2822Headers.COMMENTS, "Authenticated sender"}, 88 {"X-PMFLAGS", ".*"}, 89 {"X-Pmflags", ".*"}, 90 {"X-pmrqc", ".*"}, 91 {"Host-From:envonly", ".*"}}; 92 93 public void init() throws MessagingException { 94 //No condition passed... just compile a bunch of regular expressions 95 try { 96 compile(NESPatterns); 97 } catch(MalformedPatternException mp) { 98 throw new MessagingException("Could not initialize NES patterns", mp); 99 } 100 } 101 }