KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > james > transport > matchers > HasHabeasWarrantMark


1 /***********************************************************************
2  * Copyright (c) 2000-2004 The Apache Software Foundation. *
3  * All rights reserved. *
4  * ------------------------------------------------------------------- *
5  * Licensed under the Apache License, Version 2.0 (the "License"); you *
6  * may not use this file except in compliance with the License. You *
7  * may obtain a copy of the License at: *
8  * *
9  * http://www.apache.org/licenses/LICENSE-2.0 *
10  * *
11  * Unless required by applicable law or agreed to in writing, software *
12  * distributed under the License is distributed on an "AS IS" BASIS, *
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
14  * implied. See the License for the specific language governing *
15  * permissions and limitations under the License. *
16  ***********************************************************************/

17
18 package org.apache.james.transport.matchers;
19
20 import org.apache.mailet.GenericMatcher;
21 import org.apache.mailet.Mail;
22
23 import javax.mail.MessagingException JavaDoc;
24 import javax.mail.internet.MimeMessage JavaDoc;
25 import java.util.Collection JavaDoc;
26
27 /*
28  * This matcher tests for the Hebeas Warrant Mark.
29  * For details see: http://www.hebeas.com
30  *
31  * Usage: Place this matcher
32  *
33  * <mailet match="HasHabeasWarrantMark" class="ToProcessor">
34  * <processor> transport </processor>
35  * </mailet>
36  *
37  * in the root processs before the DNSRBL block lists (the InSpammerBlacklist matcher).
38  *
39  * Because the Habeas Warrant Mark is copyright material, I have asked for and
40  * received the following explicit statement from Habeas:
41  *
42  * -----------------------------------
43  * From: Lindsey Pettit [mailto:support@habeas.com]
44  * Sent: Sunday, September 29, 2002 5:51
45  * To: Noel J. Bergman
46  * Subject: RE: Habeas and Apache James
47  *
48  * Dear Noel,
49  *
50  * > I guess that since your Warrant Mark is copyright, I should ask for
51  * > something from you to explicitly authorize that Hebeas will permit
52  * > this code to be included and distributed as part of Apache James
53  * > under the Apache Software License. As we have established, the use
54  * > of the Habeas Warrant Mark for filtering is not restricted, but I
55  * > would like something to confirm that, so that Apache will be happy.
56  *
57  * I can hereby confirm to you that there is no license necessary in
58  * order to use the Habeas mark for filtering. That said, however, we
59  * do insist that it not ever be used as a basis for rejecting email which
60  * bears the Habeas mark.
61  * -----------------------------------
62  *
63  */

64
65 public class HasHabeasWarrantMark extends GenericMatcher
66 {
67     public static final String JavaDoc[][] warrantMark =
68     {
69         { "X-Habeas-SWE-1", "winter into spring" },
70         { "X-Habeas-SWE-2", "brightly anticipated" },
71         { "X-Habeas-SWE-3", "like Habeas SWE (tm)" },
72         { "X-Habeas-SWE-4", "Copyright 2002 Habeas (tm)" },
73         { "X-Habeas-SWE-5", "Sender Warranted Email (SWE) (tm). The sender of this" },
74         { "X-Habeas-SWE-6", "email in exchange for a license for this Habeas" },
75         { "X-Habeas-SWE-7", "warrant mark warrants that this is a Habeas Compliant" },
76         { "X-Habeas-SWE-8", "Message (HCM) and not spam. Please report use of this" },
77         { "X-Habeas-SWE-9", "mark in spam to <http://www.habeas.com/report/>." },
78     };
79
80     public Collection JavaDoc match(Mail mail) throws MessagingException JavaDoc
81     {
82         MimeMessage JavaDoc message = mail.getMessage();
83
84         //Loop through all the patterns
85
for (int i = 0; i < warrantMark.length; i++) try
86         {
87             String JavaDoc headerName = warrantMark[i][0]; //Get the header name
88
String JavaDoc requiredValue = warrantMark[i][1]; //Get the required value
89
String JavaDoc headerValue = message.getHeader(headerName, null); //Get the header value(s)
90

91             // We want an exact match, so only test the first value.
92
// If there are multiple values, the header may be
93
// (illegally) forged. I'll leave it as an exercise to
94
// others if they want to detect and report potentially
95
// forged headers.
96

97             if (!(requiredValue.equals(headerValue))) return null;
98         }
99         catch (Exception JavaDoc e)
100         {
101             log(e.toString());
102             return null; //if we get an exception, don't validate the mark
103
}
104
105         // If we get here, all headers are present and match.
106
return mail.getRecipients();
107     }
108
109     /*
110      * Returns information about the matcher, such as author, version, and copyright.
111      * <p>
112      * The string that this method returns should be plain text and not markup
113      * of any kind (such as HTML, XML, etc.).
114      *
115      * @return a String containing matcher information
116      */

117
118     public String JavaDoc getMatcherInfo()
119     {
120         return "Habeas Warrant Mark Matcher (see http://www.habeas.com for details).";
121     }
122 }
123
124
Popular Tags