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.mailets; 23 24 import org.apache.mailet.MailAddress; 25 26 import javax.mail.MessagingException; 27 import javax.mail.internet.InternetAddress; 28 import java.util.HashSet; 29 import java.util.Collection; 30 31 /** 32 * <P>Sends a notification message to the Postmaster.</P> 33 * <P>A sender of the notification message can optionally be specified. 34 * If one is not specified, the postmaster's address will be used.<BR> 35 * The "To:" header of the notification message can be set to "unaltered"; 36 * if missing will be set to the postmaster.<BR> 37 * A notice text can be specified, and in such case will be inserted into the 38 * notification inline text.<BR> 39 * If the notified message has an "error message" set, it will be inserted into the 40 * notification inline text. If the <CODE>attachStackTrace</CODE> init parameter 41 * is set to true, such error message will be attached to the notification message.<BR> 42 * The notified messages are attached in their entirety (headers and 43 * content) and the resulting MIME part type is "message/rfc822".</P> 44 * <P>Supports the <CODE>passThrough</CODE> init parameter (true if missing).</P> 45 * 46 * <P>Sample configuration:</P> 47 * <PRE><CODE> 48 * <mailet match="All" class="NotifyPostmaster"> 49 * <sender><I>an address or postmaster or sender or unaltered, default=postmaster</I></sender> 50 * <attachError><I>true or false, default=false</I></attachError> 51 * <message><I>notice attached to the original message text (optional)</I></message> 52 * <prefix><I>optional subject prefix prepended to the original message, default="Re:"</I></prefix> 53 * <inline><I>see {@link Resend}, default=none</I></inline> 54 * <attachment><I>see {@link Resend}, default=message</I></attachment> 55 * <passThrough><I>true or false, default=true</I></passThrough> 56 * <fakeDomainCheck><I>true or false, default=true</I></fakeDomainCheck> 57 * <to><I>unaltered (optional, defaults to postmaster)</I></to> 58 * <debug><I>true or false, default=false</I></debug> 59 * </mailet> 60 * </CODE></PRE> 61 * 62 * <P>The behaviour of this mailet is equivalent to using Resend with the following 63 * configuration:</P> 64 * <PRE><CODE> 65 * <mailet match="All" class="Resend"> 66 * <sender><I>an address or postmaster or sender or unaltered</I></sender> 67 * <attachError><I>true or false</I></attachError> 68 * <message><I><B>dynamically built</B></I></message> 69 * <prefix><I>a string</I></prefix> 70 * <passThrough><I>true or false</I></passThrough> 71 * <fakeDomainCheck><I>true or false</I></fakeDomainCheck> 72 * <to><I><B>unaltered or postmaster</B></I></to> 73 * <recipients><B>postmaster</B></recipients> 74 * <inline>see {@link Resend}</inline> 75 * <attachment>see {@link Resend}</attachment> 76 * <isReply>true</isReply> 77 * <debug><I>true or false</I></debug> 78 * </mailet> 79 * </CODE></PRE> 80 * <P><I>notice</I>, <I>sendingAddress</I> and <I>attachStackTrace</I> can be used instead of 81 * <I>message</I>, <I>sender</I> and <I>attachError</I>; such names are kept for backward compatibility.</P> 82 * 83 * @version CVS $Revision: 426007 $ $Date: 2006-07-27 09:52:06 +0100 (Thu, 27 Jul 2006) $ 84 */ 85 public class NotifyPostmaster extends AbstractNotify { 86 87 /** 88 * Return a string describing this mailet. 89 * 90 * @return a string describing this mailet 91 */ 92 public String getMailetInfo() { 93 return "NotifyPostmaster Mailet"; 94 } 95 96 /** Gets the expected init parameters. */ 97 protected String[] getAllowedInitParameters() { 98 String[] allowedArray = { 99 // "static", 100 "debug", 101 "passThrough", 102 "fakeDomainCheck", 103 "inline", 104 "attachment", 105 "message", 106 "notice", 107 "sender", 108 "sendingAddress", 109 "prefix", 110 "attachError", 111 "attachStackTrace", 112 "to" 113 }; 114 return allowedArray; 115 } 116 117 /* ******************************************************************** */ 118 /* ****************** Begin of getX and setX methods ****************** */ 119 /* ******************************************************************** */ 120 121 /** 122 * @return the postmaster address 123 */ 124 protected Collection getRecipients() { 125 Collection newRecipients = new HashSet(); 126 newRecipients.add(getMailetContext().getPostmaster()); 127 return newRecipients; 128 } 129 130 /** 131 * @return <CODE>SpecialAddress.UNALTERED</CODE> if specified or postmaster if missing 132 */ 133 protected InternetAddress[] getTo() throws MessagingException { 134 String addressList = getInitParameter("to"); 135 InternetAddress[] iaarray = new InternetAddress[1]; 136 iaarray[0] = getMailetContext().getPostmaster().toInternetAddress(); 137 if (addressList != null) { 138 MailAddress specialAddress = getSpecialAddress(addressList, 139 new String[] {"postmaster", "unaltered"}); 140 if (specialAddress != null) { 141 iaarray[0] = specialAddress.toInternetAddress(); 142 } else { 143 log("\"to\" parameter ignored, set to postmaster"); 144 } 145 } 146 return iaarray; 147 } 148 149 /** 150 * @return the <CODE>attachStackTrace</CODE> init parameter, 151 * or the <CODE>attachError</CODE> init parameter if missing, 152 * or false if missing 153 */ 154 protected boolean attachError() throws MessagingException { 155 String parameter = getInitParameter("attachStackTrace"); 156 if (parameter == null) { 157 return super.attachError(); 158 } 159 return new Boolean(parameter).booleanValue(); 160 } 161 162 /* ******************************************************************** */ 163 /* ******************* End of getX and setX methods ******************* */ 164 /* ******************************************************************** */ 165 166 } 167