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