View Javadoc

1   /************************************************************************
2    * Copyright (c) 2000-2006 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.mailets;
19  
20  import org.apache.mailet.GenericMailet;
21  import org.apache.mailet.Mail;
22  import org.apache.mailet.MailetException;
23  
24  import javax.mail.MessagingException;
25  
26  /***
27   * This mailet redirects the mail to the named processor
28   *
29   * Sample configuration:
30   * <mailet match="All" class="ToProcessor">
31   *   <processor>spam</processor>
32   *   <notice>Notice attached to the message (optional)</notice>
33   * </mailet>
34   *
35   */
36  public class ToProcessor extends GenericMailet {
37  
38      /***
39       * Controls certain log messages
40       */
41      private boolean isDebug = false;
42  
43      /***
44       * The name of the processor to which this mailet forwards mail
45       */
46      String processor;
47  
48      /***
49       * The error message to attach to the forwarded message
50       */
51      String noticeText = null;
52  
53      /***
54       * Initialize the mailet
55       *
56       * @throws MailetException if the processor parameter is missing
57       */
58      public void init() throws MailetException {
59          isDebug = (getInitParameter("debug") == null) ? false : new Boolean(getInitParameter("debug")).booleanValue();
60          processor = getInitParameter("processor");
61          if (processor == null) {
62              throw new MailetException("processor parameter is required");
63          }
64          noticeText = getInitParameter("notice");
65      }
66  
67      /***
68       * Deliver a mail to the processor.
69       *
70       * @param mail the mail to process
71       *
72       * @throws MessagingException in all cases
73       */
74      public void service(Mail mail) throws MessagingException {
75          if (isDebug) {
76              StringBuffer logBuffer =
77                  new StringBuffer(128)
78                          .append("Sending mail ")
79                          .append(mail)
80                          .append(" to ")
81                          .append(processor);
82              log(logBuffer.toString());
83          }
84          mail.setState(processor);
85          if (noticeText != null) {
86              if (mail.getErrorMessage() == null) {
87                  mail.setErrorMessage(noticeText);
88              } else {
89                  StringBuffer errorMessageBuffer =
90                      new StringBuffer(256)
91                              .append(mail.getErrorMessage())
92                              .append("\r\n")
93                              .append(noticeText);
94                  mail.setErrorMessage(errorMessageBuffer.toString());
95              }
96          }
97      }
98  
99      /***
100      * Return a string describing this mailet.
101      *
102      * @return a string describing this mailet
103      */
104     public String getMailetInfo() {
105         return "ToProcessor Mailet";
106     }
107 }