You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2016/11/23 13:50:05 UTC

[02/46] james-project git commit: JAMES-1854 Move mailets related with local delivery in same package

JAMES-1854 Move mailets related with local delivery in same package


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1559058a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1559058a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1559058a

Branch: refs/heads/master
Commit: 1559058a63dc9b406551577abb970ffef591db3e
Parents: 56acfd0
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 27 14:47:53 2016 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Nov 18 18:46:45 2016 +0700

----------------------------------------------------------------------
 .../james/transport/mailets/LocalDelivery.java  | 150 -------------
 .../james/transport/mailets/SieveMailet.java    | 223 -------------------
 .../transport/mailets/ToRecipientFolder.java    | 133 -----------
 .../mailets/delivery/LocalDelivery.java         | 152 +++++++++++++
 .../transport/mailets/delivery/SieveMailet.java | 223 +++++++++++++++++++
 .../mailets/delivery/ToRecipientFolder.java     | 134 +++++++++++
 .../mailets/delivery/LocalDeliveryTest.java     |   1 -
 .../mailets/delivery/SieveMailetTest.java       |   1 -
 .../mailets/delivery/ToRecipientFolderTest.java |   1 -
 9 files changed, 509 insertions(+), 509 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java
deleted file mode 100644
index fa9631d..0000000
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.transport.mailets;
-
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Lists;
-import org.apache.james.domainlist.api.DomainList;
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.sieverepository.api.SieveRepository;
-import org.apache.james.user.api.UsersRepository;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailetConfig;
-import org.apache.mailet.MailetContext;
-import org.apache.mailet.base.GenericMailet;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.mail.MessagingException;
-import java.util.Iterator;
-
-/**
- * Receives a Mail from the Queue and takes care of delivery of the
- * message to local inboxes.
- * 
- * This mailet is a composition of RecipientRewriteTable, SieveMailet 
- * and MailboxManager configured to mimic the old "LocalDelivery"
- * James 2.3 behavior.
- */
-public class LocalDelivery extends GenericMailet {
-    
-    private org.apache.james.rrt.api.RecipientRewriteTable rrt;
-    private UsersRepository usersRepository;
-    private MailboxManager mailboxManager;
-    private DomainList domainList;
-    private SieveRepository sieveRepository;
-
-    @Inject
-    public void setSieveRepository(SieveRepository sieveRepository) {
-        this.sieveRepository = sieveRepository;
-    }
-
-    @Inject
-    public void setRrt(org.apache.james.rrt.api.RecipientRewriteTable rrt) {
-        this.rrt = rrt;
-    }
-
-    @Inject
-    public void setUsersRepository(UsersRepository usersRepository) {
-        this.usersRepository = usersRepository;
-    }
-    
-    @Inject
-    public void setMailboxManager(@Named("mailboxmanager") MailboxManager mailboxManager) {
-        this.mailboxManager = mailboxManager;
-    }
-    
-    @Inject
-    public void setDomainList(DomainList domainList) {
-        this.domainList = domainList;
-    }
-
-    private SieveMailet sieveMailet;  // Mailet that actually stores the message
-    private RecipientRewriteTable recipientRewriteTable;  // Mailet that applies RecipientRewriteTable
-
-    /**
-     * Delivers a mail to a local mailbox.
-     * 
-     * @param mail the mail being processed
-     * 
-     * @throws MessagingException if an error occurs while storing the mail
-     */
-    public void service(Mail mail) throws MessagingException {
-        recipientRewriteTable.service(mail);
-        if (!mail.getState().equals(Mail.GHOST)) {
-            sieveMailet.service(mail);
-        }
-    }
-
-    /**
-     * Return a string describing this mailet.
-     * 
-     * @return a string describing this mailet
-     */
-    public String getMailetInfo() {
-        return "Local Delivery Mailet";
-    }
-
-    /**
-     * @see org.apache.mailet.base.GenericMailet#init()
-     */
-    public void init() throws MessagingException {
-        
-        super.init();
-
-        recipientRewriteTable = new RecipientRewriteTable();
-        recipientRewriteTable.setDomainList(domainList);
-        recipientRewriteTable.setRecipientRewriteTable(rrt);
-        recipientRewriteTable.init(getMailetConfig());
-        sieveMailet = new SieveMailet(usersRepository,
-            mailboxManager,
-            ResourceLocatorImpl.instanciate(usersRepository, sieveRepository),
-            "INBOX");
-        sieveMailet.init(new MailetConfig() {
-            public String getInitParameter(String name) {
-                if ("addDeliveryHeader".equals(name)) {
-                    return "Delivered-To";
-                } else if ("resetReturnPath".equals(name)) {
-                    return "true";
-                } else {
-                    return getMailetConfig().getInitParameter(name);
-                }
-            }
-
-            public Iterator<String> getInitParameterNames() {
-                return Iterators.concat(
-                        getMailetConfig().getInitParameterNames(), 
-                        Lists.newArrayList("addDeliveryHeader", "resetReturnPath").iterator());
-            }
-            
-            public MailetContext getMailetContext() {
-                return getMailetConfig().getMailetContext();
-            }
-
-            public String getMailetName() {
-                return getMailetConfig().getMailetName();
-            }
-
-        });
-        // Override the default value of "quiet"
-        sieveMailet.setQuiet(getInitParameter("quiet", true));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java
deleted file mode 100644
index 2526fc8..0000000
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.transport.mailets;
-
-import java.util.Date;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.james.core.MimeMessageInputStream;
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.exception.BadCredentialsException;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxConstants;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.transport.mailets.jsieve.Poster;
-import org.apache.james.transport.mailets.jsieve.ResourceLocator;
-import org.apache.james.transport.mailets.jsieve.SieveMailboxMailet;
-import org.apache.james.transport.util.MailetContextLog;
-import org.apache.james.user.api.UsersRepository;
-import org.apache.james.user.api.UsersRepositoryException;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailAddress;
-import org.apache.mailet.MailetConfig;
-
-/**
- * Contains resource bindings.
- */
-public class SieveMailet extends SieveMailboxMailet implements Poster {
-    private final UsersRepository usersRepos;
-    private final MailboxManager mailboxManager;
-    private final String folder;
-    private final ResourceLocator resourceLocator;
-
-    public SieveMailet(UsersRepository usersRepos, MailboxManager mailboxManager, ResourceLocator resourceLocator, String folder) {
-        this.usersRepos = usersRepos;
-        this.resourceLocator = resourceLocator;
-        this.mailboxManager = mailboxManager;
-        this.folder = folder;
-    }
-
-    @Override
-    public void init(MailetConfig config) throws MessagingException {
-        setLocator(resourceLocator);
-        setPoster(this);
-        super.init(config);
-    }
-
-    /**
-     * Return the username to use for sieve processing for the given
-     * MailAddress. If virtualhosting is supported use the full emailaddrees as
-     * username
-     * 
-     * @param m
-     * @return username
-     */
-    protected String getUsername(MailAddress m) {
-        try {
-            if (usersRepos.supportVirtualHosting()) {
-                return m.toString();
-            } else {
-                return super.getUsername(m);
-            }
-        } catch (UsersRepositoryException e) {
-            log("Unable to access UsersRepository", e);
-            return super.getUsername(m);
-
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.jsieve.mailet.SieveMailboxMailet#storeMail(org.apache.mailet
-     * .MailAddress, org.apache.mailet.MailAddress, org.apache.mailet.Mail)
-     */
-    @Override
-    public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException {
-        super.storeMail(sender, recipient, mail);
-        String s;
-        if (sender != null) {
-            s = sender.toString();
-        } else {
-            s = "<>";
-        }
-        // If no exception was thrown the message was successfully stored in the
-        // mailbox
-        log("Local delivered mail " + mail.getName() + " sucessfully from " + s + " to " + recipient.toString()
-                + " in folder " + this.folder);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jsieve.mailet.Poster#post(java.lang.String,
-     * javax.mail.internet.MimeMessage)
-     */
-    @Override
-    public void post(String url, MimeMessage mail) throws MessagingException {
-
-        final int endOfScheme = url.indexOf(':');
-
-        if (endOfScheme < 0) {
-            throw new MessagingException("Malformed URI");
-        }
-
-        else {
-
-            final String scheme = url.substring(0, endOfScheme);
-            if ("mailbox".equals(scheme)) {
-                int startOfUser = endOfScheme + 3;
-                int endOfUser = url.indexOf('@', startOfUser);
-                if (endOfUser < 0) {
-                    // TODO: When user missing, append to a default location
-                    throw new MessagingException("Shared mailbox is not supported");
-                } else {
-                    // lowerCase the user - see
-                    // https://issues.apache.org/jira/browse/JAMES-1369
-                    String user = url.substring(startOfUser, endOfUser).toLowerCase();
-                    int startOfHost = endOfUser + 1;
-                    int endOfHost = url.indexOf('/', startOfHost);
-                    String host = url.substring(startOfHost, endOfHost);
-                    String urlPath;
-                    int length = url.length();
-                    if (endOfHost + 1 == length) {
-                        urlPath = this.folder;
-                    } else {
-                        urlPath = url.substring(endOfHost, length);
-                    }
-
-                    // Check if we should use the full email address as username
-                    try {
-                        if (usersRepos.supportVirtualHosting()) {
-                            user = user + "@" + host;
-                        }
-                    } catch (UsersRepositoryException e) {
-                        throw new MessagingException("Unable to accessUsersRepository", e);
-                    }
-
-                    MailboxSession session;
-                    try {
-                        session = mailboxManager.createSystemSession(user, new MailetContextLog(getMailetContext()));
-                    } catch (BadCredentialsException e) {
-                        throw new MessagingException("Unable to authenticate to mailbox", e);
-                    } catch (MailboxException e) {
-                        throw new MessagingException("Can not access mailbox", e);
-                    }
-
-                    // Start processing request
-                    mailboxManager.startProcessingRequest(session);
-
-                    // This allows Sieve scripts to use a standard delimiter
-                    // regardless of mailbox implementation
-                    String destination = urlPath.replace('/', session.getPathDelimiter());
-
-                    if (destination == null || "".equals(destination)) {
-                        destination = this.folder;
-                    }
-                    if (destination.startsWith(session.getPathDelimiter() + ""))
-                        destination = destination.substring(1);
-
-                    // Use the MailboxSession to construct the MailboxPath - See
-                    // JAMES-1326
-                    final MailboxPath path = new MailboxPath(MailboxConstants.USER_NAMESPACE, user, destination);
-                    try {
-                        if (this.folder.equalsIgnoreCase(destination) && !(mailboxManager.mailboxExists(path, session))) {
-                            mailboxManager.createMailbox(path, session);
-                        }
-                        final MessageManager mailbox = mailboxManager.getMailbox(path, session);
-                        if (mailbox == null) {
-                            final String error = "Mailbox for user " + user + " was not found on this server.";
-                            throw new MessagingException(error);
-                        }
-
-                        mailbox.appendMessage(new MimeMessageInputStream(mail), new Date(), session, true, null);
-
-                    } catch (MailboxException e) {
-                        throw new MessagingException("Unable to access mailbox.", e);
-                    } finally {
-                        session.close();
-                        try {
-                            mailboxManager.logout(session, true);
-                        } catch (MailboxException e) {
-                            throw new MessagingException("Can logout from mailbox", e);
-                        }
-
-                        // Stop processing request
-                        mailboxManager.endProcessingRequest(session);
-
-                    }
-                }
-
-            }
-
-            else {
-                // TODO: add support for more protocols
-                // TODO: - for example mailto: for forwarding over SMTP
-                // TODO: - for example xmpp: for forwarding over Jabber
-                throw new MessagingException("Unsupported protocol");
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
deleted file mode 100644
index 2adbb3b..0000000
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRecipientFolder.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.transport.mailets;
-
-import com.google.common.collect.Iterators;
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.sieverepository.api.SieveRepository;
-import org.apache.james.user.api.UsersRepository;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailetConfig;
-import org.apache.mailet.MailetContext;
-import org.apache.mailet.base.GenericMailet;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.mail.MessagingException;
-import java.util.Arrays;
-import java.util.Iterator;
-
-/**
- * Receives a Mail from the Queue and takes care to deliver the message
- * to a defined folder of the recipient(s).
- * 
- * You have to define the folder name of the recipient(s).
- * The flag 'consume' will tell is the mail will be further
- * processed by the upcoming processor mailets, or not.
- * 
- * <pre>
- * &lt;mailet match="RecipientIsLocal" class="ToRecipientFolder"&gt;
- *    &lt;folder&gt; <i>Junk</i> &lt;/folder&gt;
- *    &lt;consume&gt; <i>false</i> &lt;/consume&gt;
- * &lt;/mailet&gt;
- * </pre>
- * 
- */
-public class ToRecipientFolder extends GenericMailet {
-
-    public static final String FOLDER_PARAMETER = "folder";
-    public static final String CONSUME_PARAMETER = "consume";
-
-    private MailboxManager mailboxManager;
-    private SieveRepository sieveRepository;
-    private UsersRepository usersRepository;
-
-    @Inject
-    public void setMailboxManager(@Named("mailboxmanager")MailboxManager mailboxManager) {
-        this.mailboxManager = mailboxManager;
-    }
-
-    @Inject
-    public void setSieveRepository(SieveRepository sieveRepository) {
-        this.sieveRepository = sieveRepository;
-    }
-
-    @Inject
-    public void setUsersRepository(UsersRepository usersRepository) {
-        this.usersRepository = usersRepository;
-    }
-
-    private SieveMailet sieveMailet;  // Mailet that actually stores the message
-
-    /**
-     * Delivers a mail to a local mailbox in a given folder.
-     * 
-     * @see org.apache.mailet.base.GenericMailet#service(org.apache.mailet.Mail)
-     */
-    @Override
-    public void service(Mail mail) throws MessagingException {
-        if (!mail.getState().equals(Mail.GHOST)) {
-            sieveMailet.service(mail);
-        }
-    }
-
-    @Override
-    public void init() throws MessagingException {
-        super.init();
-        sieveMailet = new SieveMailet(usersRepository, mailboxManager, ResourceLocatorImpl.instanciate(usersRepository, sieveRepository), getInitParameter(FOLDER_PARAMETER, "INBOX"));
-        sieveMailet.init(new MailetConfig() {
-            
-            @Override
-            public String getInitParameter(String name) {
-                if ("addDeliveryHeader".equals(name)) {
-                    return "Delivered-To";
-                } else if ("resetReturnPath".equals(name)) {
-                    return "true";
-                } else {
-                    return getMailetConfig().getInitParameter(name);
-                }
-            }
-
-            @Override
-            public Iterator<String> getInitParameterNames() {
-                return Iterators.concat(getMailetConfig().getInitParameterNames(),
-                        Arrays.asList("addDeliveryHeader", "resetReturnPath").iterator());
-            }
-            
-            @Override
-            public MailetContext getMailetContext() {
-                return getMailetConfig().getMailetContext();
-            }
-
-            @Override
-            public String getMailetName() {
-                return getMailetConfig().getMailetName();
-            }
-
-        });
-        sieveMailet.setQuiet(getInitParameter("quiet", true));
-        sieveMailet.setConsume(getInitParameter(CONSUME_PARAMETER, false));
-    }
-
-    @Override
-    public String getMailetInfo() {
-        return ToRecipientFolder.class.getName() + " Mailet";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
new file mode 100644
index 0000000..7fafbbe
--- /dev/null
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
@@ -0,0 +1,152 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.transport.mailets.delivery;
+
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.sieverepository.api.SieveRepository;
+import org.apache.james.transport.mailets.RecipientRewriteTable;
+import org.apache.james.transport.mailets.ResourceLocatorImpl;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailetConfig;
+import org.apache.mailet.MailetContext;
+import org.apache.mailet.base.GenericMailet;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.mail.MessagingException;
+import java.util.Iterator;
+
+/**
+ * Receives a Mail from the Queue and takes care of delivery of the
+ * message to local inboxes.
+ * 
+ * This mailet is a composition of RecipientRewriteTable, SieveMailet 
+ * and MailboxManager configured to mimic the old "LocalDelivery"
+ * James 2.3 behavior.
+ */
+public class LocalDelivery extends GenericMailet {
+    
+    private org.apache.james.rrt.api.RecipientRewriteTable rrt;
+    private UsersRepository usersRepository;
+    private MailboxManager mailboxManager;
+    private DomainList domainList;
+    private SieveRepository sieveRepository;
+
+    @Inject
+    public void setSieveRepository(SieveRepository sieveRepository) {
+        this.sieveRepository = sieveRepository;
+    }
+
+    @Inject
+    public void setRrt(org.apache.james.rrt.api.RecipientRewriteTable rrt) {
+        this.rrt = rrt;
+    }
+
+    @Inject
+    public void setUsersRepository(UsersRepository usersRepository) {
+        this.usersRepository = usersRepository;
+    }
+    
+    @Inject
+    public void setMailboxManager(@Named("mailboxmanager") MailboxManager mailboxManager) {
+        this.mailboxManager = mailboxManager;
+    }
+    
+    @Inject
+    public void setDomainList(DomainList domainList) {
+        this.domainList = domainList;
+    }
+
+    private SieveMailet sieveMailet;  // Mailet that actually stores the message
+    private RecipientRewriteTable recipientRewriteTable;  // Mailet that applies RecipientRewriteTable
+
+    /**
+     * Delivers a mail to a local mailbox.
+     * 
+     * @param mail the mail being processed
+     * 
+     * @throws MessagingException if an error occurs while storing the mail
+     */
+    public void service(Mail mail) throws MessagingException {
+        recipientRewriteTable.service(mail);
+        if (!mail.getState().equals(Mail.GHOST)) {
+            sieveMailet.service(mail);
+        }
+    }
+
+    /**
+     * Return a string describing this mailet.
+     * 
+     * @return a string describing this mailet
+     */
+    public String getMailetInfo() {
+        return "Local Delivery Mailet";
+    }
+
+    /**
+     * @see org.apache.mailet.base.GenericMailet#init()
+     */
+    public void init() throws MessagingException {
+        
+        super.init();
+
+        recipientRewriteTable = new RecipientRewriteTable();
+        recipientRewriteTable.setDomainList(domainList);
+        recipientRewriteTable.setRecipientRewriteTable(rrt);
+        recipientRewriteTable.init(getMailetConfig());
+        sieveMailet = new SieveMailet(usersRepository,
+            mailboxManager,
+            ResourceLocatorImpl.instanciate(usersRepository, sieveRepository),
+            "INBOX");
+        sieveMailet.init(new MailetConfig() {
+            public String getInitParameter(String name) {
+                if ("addDeliveryHeader".equals(name)) {
+                    return "Delivered-To";
+                } else if ("resetReturnPath".equals(name)) {
+                    return "true";
+                } else {
+                    return getMailetConfig().getInitParameter(name);
+                }
+            }
+
+            public Iterator<String> getInitParameterNames() {
+                return Iterators.concat(
+                        getMailetConfig().getInitParameterNames(), 
+                        Lists.newArrayList("addDeliveryHeader", "resetReturnPath").iterator());
+            }
+            
+            public MailetContext getMailetContext() {
+                return getMailetConfig().getMailetContext();
+            }
+
+            public String getMailetName() {
+                return getMailetConfig().getMailetName();
+            }
+
+        });
+        // Override the default value of "quiet"
+        sieveMailet.setQuiet(getInitParameter("quiet", true));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
new file mode 100644
index 0000000..c074858
--- /dev/null
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
@@ -0,0 +1,223 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.transport.mailets.delivery;
+
+import java.util.Date;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.core.MimeMessageInputStream;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.exception.BadCredentialsException;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.transport.mailets.jsieve.Poster;
+import org.apache.james.transport.mailets.jsieve.ResourceLocator;
+import org.apache.james.transport.mailets.jsieve.SieveMailboxMailet;
+import org.apache.james.transport.util.MailetContextLog;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.apache.mailet.MailetConfig;
+
+/**
+ * Contains resource bindings.
+ */
+public class SieveMailet extends SieveMailboxMailet implements Poster {
+    private final UsersRepository usersRepos;
+    private final MailboxManager mailboxManager;
+    private final String folder;
+    private final ResourceLocator resourceLocator;
+
+    public SieveMailet(UsersRepository usersRepos, MailboxManager mailboxManager, ResourceLocator resourceLocator, String folder) {
+        this.usersRepos = usersRepos;
+        this.resourceLocator = resourceLocator;
+        this.mailboxManager = mailboxManager;
+        this.folder = folder;
+    }
+
+    @Override
+    public void init(MailetConfig config) throws MessagingException {
+        setLocator(resourceLocator);
+        setPoster(this);
+        super.init(config);
+    }
+
+    /**
+     * Return the username to use for sieve processing for the given
+     * MailAddress. If virtualhosting is supported use the full emailaddrees as
+     * username
+     * 
+     * @param m
+     * @return username
+     */
+    protected String getUsername(MailAddress m) {
+        try {
+            if (usersRepos.supportVirtualHosting()) {
+                return m.toString();
+            } else {
+                return super.getUsername(m);
+            }
+        } catch (UsersRepositoryException e) {
+            log("Unable to access UsersRepository", e);
+            return super.getUsername(m);
+
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.jsieve.mailet.SieveMailboxMailet#storeMail(org.apache.mailet
+     * .MailAddress, org.apache.mailet.MailAddress, org.apache.mailet.Mail)
+     */
+    @Override
+    public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException {
+        super.storeMail(sender, recipient, mail);
+        String s;
+        if (sender != null) {
+            s = sender.toString();
+        } else {
+            s = "<>";
+        }
+        // If no exception was thrown the message was successfully stored in the
+        // mailbox
+        log("Local delivered mail " + mail.getName() + " sucessfully from " + s + " to " + recipient.toString()
+                + " in folder " + this.folder);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.jsieve.mailet.Poster#post(java.lang.String,
+     * javax.mail.internet.MimeMessage)
+     */
+    @Override
+    public void post(String url, MimeMessage mail) throws MessagingException {
+
+        final int endOfScheme = url.indexOf(':');
+
+        if (endOfScheme < 0) {
+            throw new MessagingException("Malformed URI");
+        }
+
+        else {
+
+            final String scheme = url.substring(0, endOfScheme);
+            if ("mailbox".equals(scheme)) {
+                int startOfUser = endOfScheme + 3;
+                int endOfUser = url.indexOf('@', startOfUser);
+                if (endOfUser < 0) {
+                    // TODO: When user missing, append to a default location
+                    throw new MessagingException("Shared mailbox is not supported");
+                } else {
+                    // lowerCase the user - see
+                    // https://issues.apache.org/jira/browse/JAMES-1369
+                    String user = url.substring(startOfUser, endOfUser).toLowerCase();
+                    int startOfHost = endOfUser + 1;
+                    int endOfHost = url.indexOf('/', startOfHost);
+                    String host = url.substring(startOfHost, endOfHost);
+                    String urlPath;
+                    int length = url.length();
+                    if (endOfHost + 1 == length) {
+                        urlPath = this.folder;
+                    } else {
+                        urlPath = url.substring(endOfHost, length);
+                    }
+
+                    // Check if we should use the full email address as username
+                    try {
+                        if (usersRepos.supportVirtualHosting()) {
+                            user = user + "@" + host;
+                        }
+                    } catch (UsersRepositoryException e) {
+                        throw new MessagingException("Unable to accessUsersRepository", e);
+                    }
+
+                    MailboxSession session;
+                    try {
+                        session = mailboxManager.createSystemSession(user, new MailetContextLog(getMailetContext()));
+                    } catch (BadCredentialsException e) {
+                        throw new MessagingException("Unable to authenticate to mailbox", e);
+                    } catch (MailboxException e) {
+                        throw new MessagingException("Can not access mailbox", e);
+                    }
+
+                    // Start processing request
+                    mailboxManager.startProcessingRequest(session);
+
+                    // This allows Sieve scripts to use a standard delimiter
+                    // regardless of mailbox implementation
+                    String destination = urlPath.replace('/', session.getPathDelimiter());
+
+                    if (destination == null || "".equals(destination)) {
+                        destination = this.folder;
+                    }
+                    if (destination.startsWith(session.getPathDelimiter() + ""))
+                        destination = destination.substring(1);
+
+                    // Use the MailboxSession to construct the MailboxPath - See
+                    // JAMES-1326
+                    final MailboxPath path = new MailboxPath(MailboxConstants.USER_NAMESPACE, user, destination);
+                    try {
+                        if (this.folder.equalsIgnoreCase(destination) && !(mailboxManager.mailboxExists(path, session))) {
+                            mailboxManager.createMailbox(path, session);
+                        }
+                        final MessageManager mailbox = mailboxManager.getMailbox(path, session);
+                        if (mailbox == null) {
+                            final String error = "Mailbox for user " + user + " was not found on this server.";
+                            throw new MessagingException(error);
+                        }
+
+                        mailbox.appendMessage(new MimeMessageInputStream(mail), new Date(), session, true, null);
+
+                    } catch (MailboxException e) {
+                        throw new MessagingException("Unable to access mailbox.", e);
+                    } finally {
+                        session.close();
+                        try {
+                            mailboxManager.logout(session, true);
+                        } catch (MailboxException e) {
+                            throw new MessagingException("Can logout from mailbox", e);
+                        }
+
+                        // Stop processing request
+                        mailboxManager.endProcessingRequest(session);
+
+                    }
+                }
+
+            }
+
+            else {
+                // TODO: add support for more protocols
+                // TODO: - for example mailto: for forwarding over SMTP
+                // TODO: - for example xmpp: for forwarding over Jabber
+                throw new MessagingException("Unsupported protocol");
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
new file mode 100644
index 0000000..e5af0cb
--- /dev/null
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
@@ -0,0 +1,134 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.transport.mailets.delivery;
+
+import com.google.common.collect.Iterators;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.sieverepository.api.SieveRepository;
+import org.apache.james.transport.mailets.ResourceLocatorImpl;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailetConfig;
+import org.apache.mailet.MailetContext;
+import org.apache.mailet.base.GenericMailet;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.mail.MessagingException;
+import java.util.Arrays;
+import java.util.Iterator;
+
+/**
+ * Receives a Mail from the Queue and takes care to deliver the message
+ * to a defined folder of the recipient(s).
+ * 
+ * You have to define the folder name of the recipient(s).
+ * The flag 'consume' will tell is the mail will be further
+ * processed by the upcoming processor mailets, or not.
+ * 
+ * <pre>
+ * &lt;mailet match="RecipientIsLocal" class="ToRecipientFolder"&gt;
+ *    &lt;folder&gt; <i>Junk</i> &lt;/folder&gt;
+ *    &lt;consume&gt; <i>false</i> &lt;/consume&gt;
+ * &lt;/mailet&gt;
+ * </pre>
+ * 
+ */
+public class ToRecipientFolder extends GenericMailet {
+
+    public static final String FOLDER_PARAMETER = "folder";
+    public static final String CONSUME_PARAMETER = "consume";
+
+    private MailboxManager mailboxManager;
+    private SieveRepository sieveRepository;
+    private UsersRepository usersRepository;
+
+    @Inject
+    public void setMailboxManager(@Named("mailboxmanager")MailboxManager mailboxManager) {
+        this.mailboxManager = mailboxManager;
+    }
+
+    @Inject
+    public void setSieveRepository(SieveRepository sieveRepository) {
+        this.sieveRepository = sieveRepository;
+    }
+
+    @Inject
+    public void setUsersRepository(UsersRepository usersRepository) {
+        this.usersRepository = usersRepository;
+    }
+
+    private SieveMailet sieveMailet;  // Mailet that actually stores the message
+
+    /**
+     * Delivers a mail to a local mailbox in a given folder.
+     * 
+     * @see org.apache.mailet.base.GenericMailet#service(org.apache.mailet.Mail)
+     */
+    @Override
+    public void service(Mail mail) throws MessagingException {
+        if (!mail.getState().equals(Mail.GHOST)) {
+            sieveMailet.service(mail);
+        }
+    }
+
+    @Override
+    public void init() throws MessagingException {
+        super.init();
+        sieveMailet = new SieveMailet(usersRepository, mailboxManager, ResourceLocatorImpl.instanciate(usersRepository, sieveRepository), getInitParameter(FOLDER_PARAMETER, "INBOX"));
+        sieveMailet.init(new MailetConfig() {
+            
+            @Override
+            public String getInitParameter(String name) {
+                if ("addDeliveryHeader".equals(name)) {
+                    return "Delivered-To";
+                } else if ("resetReturnPath".equals(name)) {
+                    return "true";
+                } else {
+                    return getMailetConfig().getInitParameter(name);
+                }
+            }
+
+            @Override
+            public Iterator<String> getInitParameterNames() {
+                return Iterators.concat(getMailetConfig().getInitParameterNames(),
+                        Arrays.asList("addDeliveryHeader", "resetReturnPath").iterator());
+            }
+            
+            @Override
+            public MailetContext getMailetContext() {
+                return getMailetConfig().getMailetContext();
+            }
+
+            @Override
+            public String getMailetName() {
+                return getMailetConfig().getMailetName();
+            }
+
+        });
+        sieveMailet.setQuiet(getInitParameter("quiet", true));
+        sieveMailet.setConsume(getInitParameter(CONSUME_PARAMETER, false));
+    }
+
+    @Override
+    public String getMailetInfo() {
+        return ToRecipientFolder.class.getName() + " Mailet";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
index b026327..9a188ff 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
@@ -48,7 +48,6 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
-import org.apache.james.transport.mailets.LocalDelivery;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
index 77f67e7..1c69378 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
@@ -49,7 +49,6 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
-import org.apache.james.transport.mailets.SieveMailet;
 import org.apache.james.transport.mailets.jsieve.ResourceLocator;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.mailet.Mail;

http://git-wip-us.apache.org/repos/asf/james-project/blob/1559058a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
index 350d4f5..7123b80 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
@@ -46,7 +46,6 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.sieverepository.api.SieveRepository;
-import org.apache.james.transport.mailets.ToRecipientFolder;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org