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.commons.collections.iterators.IteratorChain; 21 import org.apache.mailet.GenericMailet; 22 import org.apache.mailet.Mail; 23 import org.apache.mailet.MailetConfig; 24 import org.apache.mailet.MailetContext; 25 26 import javax.mail.MessagingException; 27 28 import java.util.ArrayList; 29 import java.util.Collection; 30 import java.util.Iterator; 31 32 /*** 33 * Receives a Mail from JamesSpoolManager and takes care of delivery of the 34 * message to local inboxes. 35 * 36 * Since James 2.3.0 this mailet is a composition of 37 * UserRepositoryAliasingForwarding and ToMultiRepository 38 * configurated to mimic the old "LocalDelivery" behaviour. 39 */ 40 public class LocalDelivery extends GenericMailet { 41 42 /*** 43 * Mailet that apply aliasing and forwarding 44 */ 45 private UsersRepositoryAliasingForwarding aliasingMailet; 46 47 /*** 48 * Mailet that actually store the message 49 */ 50 private ToMultiRepository deliveryMailet; 51 52 /*** 53 * Delivers a mail to a local mailbox. 54 * 55 * @param mail 56 * the mail being processed 57 * 58 * @throws MessagingException 59 * if an error occurs while storing the mail 60 */ 61 public void service(Mail mail) throws MessagingException { 62 aliasingMailet.service(mail); 63 if (mail.getState() != Mail.GHOST) { 64 deliveryMailet.service(mail); 65 } 66 } 67 68 /*** 69 * Return a string describing this mailet. 70 * 71 * @return a string describing this mailet 72 */ 73 public String getMailetInfo() { 74 return "Local Delivery Mailet"; 75 } 76 77 /*** 78 * @see org.apache.mailet.GenericMailet#init() 79 */ 80 public void init() throws MessagingException { 81 super.init(); 82 aliasingMailet = new UsersRepositoryAliasingForwarding(); 83 aliasingMailet.init(getMailetConfig()); 84 deliveryMailet = new ToMultiRepository(); 85 MailetConfig m = new MailetConfig() { 86 87 /*** 88 * @see org.apache.mailet.MailetConfig#getInitParameter(java.lang.String) 89 */ 90 public String getInitParameter(String name) { 91 if ("addDeliveryHeader".equals(name)) { 92 return "Delivered-To"; 93 } else if ("resetReturnPath".equals(name)) { 94 return "true"; 95 } else { 96 return getMailetConfig().getInitParameter(name); 97 } 98 } 99 100 /*** 101 * @see org.apache.mailet.MailetConfig#getInitParameterNames() 102 */ 103 public Iterator getInitParameterNames() { 104 IteratorChain c = new IteratorChain(); 105 Collection h = new ArrayList(); 106 h.add("addDeliveryHeader"); 107 h.add("resetReturnPath"); 108 c.addIterator(getMailetConfig().getInitParameterNames()); 109 c.addIterator(h.iterator()); 110 return c; 111 } 112 113 /*** 114 * @see org.apache.mailet.MailetConfig#getMailetContext() 115 */ 116 public MailetContext getMailetContext() { 117 return getMailetConfig().getMailetContext(); 118 } 119 120 /*** 121 * @see org.apache.mailet.MailetConfig#getMailetName() 122 */ 123 public String getMailetName() { 124 return getMailetConfig().getMailetName(); 125 } 126 127 }; 128 deliveryMailet.init(m); 129 } 130 131 }