001: /****************************************************************
002: * Licensed to the Apache Software Foundation (ASF) under one *
003: * or more contributor license agreements. See the NOTICE file *
004: * distributed with this work for additional information *
005: * regarding copyright ownership. The ASF licenses this file *
006: * to you under the Apache License, Version 2.0 (the *
007: * "License"); you may not use this file except in compliance *
008: * with the License. You may obtain a copy of the License at *
009: * *
010: * http://www.apache.org/licenses/LICENSE-2.0 *
011: * *
012: * Unless required by applicable law or agreed to in writing, *
013: * software distributed under the License is distributed on an *
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
015: * KIND, either express or implied. See the License for the *
016: * specific language governing permissions and limitations *
017: * under the License. *
018: ****************************************************************/package org.apache.james.transport.mailets;
019:
020: import org.apache.mailet.MailAddress;
021:
022: import javax.mail.MessagingException;
023: import javax.mail.internet.InternetAddress;
024: import java.util.Collection;
025: import java.util.HashSet;
026:
027: /**
028: * <P>Replaces incoming recipients with those specified, and resends the message unaltered.</P>
029: * <P>Can be totally replaced by an equivalent usage of {@link Resend} (see below),
030: * simply replacing <I><forwardto></I> with <I><recipients></I>.
031: *
032: * <P>Sample configuration:</P>
033: * <PRE><CODE>
034: * <mailet match="All" class="Forward">
035: * <forwardTo><I>comma delimited list of email addresses</I></forwardTo>
036: * <passThrough><I>true or false, default=false</I></passThrough>
037: * <fakeDomainCheck><I>true or false, default=true</I></fakeDomainCheck>
038: * <debug><I>true or false, default=false</I></debug>
039: * </mailet>
040: * </CODE></PRE>
041: *
042: * <P>The behaviour of this mailet is equivalent to using Resend with the following
043: * configuration:</P>
044: * <PRE><CODE>
045: * <mailet match="All" class="Resend">
046: * <recipients>comma delimited list of email addresses</recipients>
047: * <passThrough>true or false</passThrough>
048: * <fakeDomainCheck><I>true or false</I></fakeDomainCheck>
049: * <debug><I>true or false</I></debug>
050: * </mailet>
051: * </CODE></PRE>
052: * <P><I>forwardto</I> can be used instead of
053: * <I>forwardTo</I>; such name is kept for backward compatibility.</P>
054: *
055: * @version CVS $Revision: 494012 $ $Date: 2007-01-08 11:23:58 +0100 (Mo, 08 Jan 2007) $
056: */
057: public class Forward extends AbstractRedirect {
058:
059: /**
060: * Return a string describing this mailet.
061: *
062: * @return a string describing this mailet
063: */
064: public String getMailetInfo() {
065: return "Forward Mailet";
066: }
067:
068: /** Gets the expected init parameters. */
069: protected String[] getAllowedInitParameters() {
070: String[] allowedArray = {
071: // "static",
072: "debug", "passThrough", "fakeDomainCheck", "forwardto",
073: "forwardTo" };
074: return allowedArray;
075: }
076:
077: /* ******************************************************************** */
078: /* ****************** Begin of getX and setX methods ****************** */
079: /* ******************************************************************** */
080:
081: /**
082: * @return UNALTERED
083: */
084: protected int getInLineType() throws MessagingException {
085: return UNALTERED;
086: }
087:
088: /**
089: * @return NONE
090: */
091: protected int getAttachmentType() throws MessagingException {
092: return NONE;
093: }
094:
095: /**
096: * @return ""
097: */
098: protected String getMessage() throws MessagingException {
099: return "";
100: }
101:
102: /**
103: * @return the <CODE>recipients</CODE> init parameter or null if missing
104: */
105: protected Collection getRecipients() throws MessagingException {
106: Collection newRecipients = new HashSet();
107: String addressList = getInitParameter("forwardto",
108: getInitParameter("forwardTo"));
109:
110: // if nothing was specified, throw an exception
111: if (addressList == null) {
112: throw new MessagingException(
113: "Failed to initialize \"recipients\" list: no <forwardTo> or <forwardto> init parameter found");
114: }
115:
116: try {
117: InternetAddress[] iaarray = InternetAddress.parse(
118: addressList, false);
119: for (int i = 0; i < iaarray.length; i++) {
120: String addressString = iaarray[i].getAddress();
121: MailAddress specialAddress = getSpecialAddress(
122: addressString, new String[] { "postmaster",
123: "sender", "from", "replyTo",
124: "reversePath", "unaltered",
125: "recipients", "to", "null" });
126: if (specialAddress != null) {
127: newRecipients.add(specialAddress);
128: } else {
129: newRecipients.add(new MailAddress(iaarray[i]));
130: }
131: }
132: } catch (Exception e) {
133: throw new MessagingException(
134: "Exception thrown in getRecipients() parsing: "
135: + addressList, e);
136: }
137: if (newRecipients.size() == 0) {
138: throw new MessagingException(
139: "Failed to initialize \"recipients\" list; empty <recipients> init parameter found.");
140: }
141:
142: return newRecipients;
143: }
144:
145: /**
146: * @return null
147: */
148: protected InternetAddress[] getTo() throws MessagingException {
149: return null;
150: }
151:
152: /**
153: * @return null
154: */
155: protected MailAddress getReplyTo() throws MessagingException {
156: return null;
157: }
158:
159: /**
160: * @return null
161: */
162: protected MailAddress getReversePath() throws MessagingException {
163: return null;
164: }
165:
166: /**
167: * @return null
168: */
169: protected MailAddress getSender() throws MessagingException {
170: return null;
171: }
172:
173: /**
174: * @return null
175: */
176: protected String getSubject() throws MessagingException {
177: return null;
178: }
179:
180: /**
181: * @return ""
182: */
183: protected String getSubjectPrefix() throws MessagingException {
184: return null;
185: }
186:
187: /**
188: * @return false
189: */
190: protected boolean attachError() {
191: return false;
192: }
193:
194: /**
195: * @return false
196: */
197: protected boolean isReply() throws MessagingException {
198: return false;
199: }
200:
201: /* ******************************************************************** */
202: /* ******************* End of getX and setX methods ******************* */
203: /* ******************************************************************** */
204:
205: }
|