JAMES-1854 Rename MailStorer into MailStore
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/42800ae5 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/42800ae5 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/42800ae5 Branch: refs/heads/master Commit: 42800ae531d7060b8834c5d918acc080cf19d314 Parents: b4a31c7 Author: Benoit Tellier <[email protected]> Authored: Thu Nov 10 15:55:08 2016 +0700 Committer: Benoit Tellier <[email protected]> Committed: Fri Nov 18 18:46:46 2016 +0700 ---------------------------------------------------------------------- .../james/transport/mailets/LocalDelivery.java | 4 +- .../transport/mailets/SieveLocalDelivery.java | 4 +- .../mailets/SieveToRecipientFolder.java | 4 +- .../transport/mailets/ToRecipientFolder.java | 4 +- .../mailets/delivery/MailDispatcher.java | 18 +- .../transport/mailets/delivery/MailStore.java | 29 +++ .../transport/mailets/delivery/MailStorer.java | 29 --- .../mailets/delivery/SimpleMailStore.java | 103 ++++++++++ .../mailets/delivery/SimpleMailStorer.java | 103 ---------- .../mailets/jsieve/delivery/SieveMailStore.java | 198 +++++++++++++++++++ .../jsieve/delivery/SieveMailStorer.java | 198 ------------------- .../mailets/delivery/MailDispatcherTest.java | 32 +-- .../mailets/delivery/SieveIntegrationTest.java | 6 +- .../mailets/delivery/SimpleMailStoreTest.java | 118 +++++++++++ .../mailets/delivery/SimpleMailStorerTest.java | 118 ----------- 15 files changed, 484 insertions(+), 484 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/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 index 08e4f02..2a9cc76 100644 --- 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 @@ -29,7 +29,7 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.transport.mailets.delivery.MailDispatcher; import org.apache.james.transport.mailets.delivery.MailboxAppender; -import org.apache.james.transport.mailets.delivery.SimpleMailStorer; +import org.apache.james.transport.mailets.delivery.SimpleMailStore; import org.apache.james.transport.mailets.jsieve.CommonsLoggingAdapter; import org.apache.james.user.api.UsersRepository; import org.apache.mailet.Mail; @@ -94,7 +94,7 @@ public class LocalDelivery extends GenericMailet { .verbose(getInitParameter("verbose", false)) .build(); mailDispatcher = MailDispatcher.builder() - .mailStorer(SimpleMailStorer.builder() + .mailStorer(SimpleMailStore.builder() .mailboxAppender(new MailboxAppender(mailboxManager, getMailetContext().getLogger())) .usersRepository(usersRepository) .folder("INBOX") http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveLocalDelivery.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveLocalDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveLocalDelivery.java index bdd3eb5..69af0bf 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveLocalDelivery.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveLocalDelivery.java @@ -29,7 +29,7 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.sieverepository.api.SieveRepository; import org.apache.james.transport.mailets.delivery.MailDispatcher; import org.apache.james.transport.mailets.delivery.MailboxAppender; -import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStorer; +import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStore; import org.apache.james.transport.mailets.jsieve.delivery.SievePoster; import org.apache.james.transport.mailets.jsieve.CommonsLoggingAdapter; import org.apache.james.user.api.UsersRepository; @@ -102,7 +102,7 @@ public class SieveLocalDelivery extends GenericMailet { .build(); String folder = "INBOX"; mailDispatcher = MailDispatcher.builder() - .mailStorer(SieveMailStorer.builder() + .mailStorer(SieveMailStore.builder() .sievePoster(new SievePoster(new MailboxAppender(mailboxManager, getMailetContext().getLogger()), folder, usersRepository)) .usersRepository(usersRepository) .resourceLocator(ResourceLocatorImpl.instanciate(usersRepository, sieveRepository)) http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveToRecipientFolder.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveToRecipientFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveToRecipientFolder.java index 17f75f3..67039a7 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveToRecipientFolder.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SieveToRecipientFolder.java @@ -27,7 +27,7 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.sieverepository.api.SieveRepository; import org.apache.james.transport.mailets.delivery.MailDispatcher; import org.apache.james.transport.mailets.delivery.MailboxAppender; -import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStorer; +import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStore; import org.apache.james.transport.mailets.jsieve.delivery.SievePoster; import org.apache.james.transport.mailets.jsieve.CommonsLoggingAdapter; import org.apache.james.user.api.UsersRepository; @@ -92,7 +92,7 @@ public class SieveToRecipientFolder extends GenericMailet { .build(); String folder = getInitParameter(FOLDER_PARAMETER, "INBOX"); mailDispatcher = MailDispatcher.builder() - .mailStorer(SieveMailStorer.builder() + .mailStorer(SieveMailStore.builder() .sievePoster(new SievePoster(new MailboxAppender(mailboxManager, getMailetContext().getLogger()), folder, usersRepository)) .usersRepository(usersRepository) .resourceLocator(ResourceLocatorImpl.instanciate(usersRepository, sieveRepository)) http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/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 index e63a843..a59e9e2 100644 --- 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 @@ -26,7 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.james.mailbox.MailboxManager; import org.apache.james.transport.mailets.delivery.MailDispatcher; import org.apache.james.transport.mailets.delivery.MailboxAppender; -import org.apache.james.transport.mailets.delivery.SimpleMailStorer; +import org.apache.james.transport.mailets.delivery.SimpleMailStore; import org.apache.james.transport.mailets.jsieve.CommonsLoggingAdapter; import org.apache.james.user.api.UsersRepository; import org.apache.mailet.Mail; @@ -83,7 +83,7 @@ public class ToRecipientFolder extends GenericMailet { .verbose(getInitParameter("verbose", false)) .build(); mailDispatcher = MailDispatcher.builder() - .mailStorer(SimpleMailStorer.builder() + .mailStorer(SimpleMailStore.builder() .mailboxAppender(new MailboxAppender(mailboxManager, getMailetContext().getLogger())) .usersRepository(usersRepository) .folder(getInitParameter(FOLDER_PARAMETER, "INBOX")) http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java index afc00bc..3bcd662 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java @@ -45,7 +45,7 @@ public class MailDispatcher { } public static class Builder { - private MailStorer mailStorer; + private MailStore mailStore; private boolean consume; private MailetContext mailetContext; private Log log; @@ -55,8 +55,8 @@ public class MailDispatcher { return this; } - public Builder mailStorer(MailStorer mailStorer) { - this.mailStorer = mailStorer; + public Builder mailStorer(MailStore mailStore) { + this.mailStore = mailStore; return this; } @@ -71,21 +71,21 @@ public class MailDispatcher { } public MailDispatcher build() throws MessagingException { - Preconditions.checkNotNull(mailStorer); + Preconditions.checkNotNull(mailStore); Preconditions.checkNotNull(log); Preconditions.checkNotNull(mailetContext); - return new MailDispatcher(mailStorer, consume, log, mailetContext); + return new MailDispatcher(mailStore, consume, log, mailetContext); } } - private final MailStorer mailStorer; + private final MailStore mailStore; private final boolean consume; private final MailetContext mailetContext; private final Log log; - private MailDispatcher(MailStorer mailStorer, boolean consume, Log log, MailetContext mailetContext) { - this.mailStorer = mailStorer; + private MailDispatcher(MailStore mailStore, boolean consume, Log log, MailetContext mailetContext) { + this.mailStore = mailStore; this.consume = consume; this.log = log; this.mailetContext = mailetContext; @@ -128,7 +128,7 @@ public class MailDispatcher { try { // Add qmail's de facto standard Delivered-To header message.addHeader(DELIVERED_TO, recipient.toString()); - mailStorer.storeMail(mail.getSender(), recipient, mail); + mailStore.storeMail(mail.getSender(), recipient, mail); message.removeHeader(DELIVERED_TO); } catch (Exception ex) { log.error("Error while storing mail.", ex); http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStore.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStore.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStore.java new file mode 100644 index 0000000..069d696 --- /dev/null +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStore.java @@ -0,0 +1,29 @@ +/**************************************************************** + * 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 javax.mail.MessagingException; + +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; + +public interface MailStore { + void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException; +} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStorer.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStorer.java deleted file mode 100644 index d95ee62..0000000 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStorer.java +++ /dev/null @@ -1,29 +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.delivery; - -import javax.mail.MessagingException; - -import org.apache.mailet.Mail; -import org.apache.mailet.MailAddress; - -public interface MailStorer { - void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException; -} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java new file mode 100644 index 0000000..3324491 --- /dev/null +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java @@ -0,0 +1,103 @@ +/**************************************************************** + * 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 javax.mail.MessagingException; + +import org.apache.commons.logging.Log; +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 com.google.common.base.Preconditions; + +public class SimpleMailStore implements MailStore { + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private UsersRepository usersRepos; + private MailboxAppender mailboxAppender; + private String folder; + private Log log; + + public Builder folder(String folder) { + this.folder = folder; + return this; + } + + public Builder usersRepository(UsersRepository usersRepository) { + this.usersRepos = usersRepository; + return this; + } + + public Builder mailboxAppender(MailboxAppender mailboxAppender) { + this.mailboxAppender = mailboxAppender; + return this; + } + + public Builder log(Log log) { + this.log = log; + return this; + } + + public SimpleMailStore build() throws MessagingException { + Preconditions.checkNotNull(usersRepos); + Preconditions.checkNotNull(folder); + Preconditions.checkNotNull(log); + Preconditions.checkNotNull(mailboxAppender); + return new SimpleMailStore(mailboxAppender, usersRepos, log, folder); + } + } + + private final MailboxAppender mailboxAppender; + private final UsersRepository usersRepository; + private final Log log; + private final String folder; + + private SimpleMailStore(MailboxAppender mailboxAppender, UsersRepository usersRepository, Log log, String folder) { + this.mailboxAppender = mailboxAppender; + this.usersRepository = usersRepository; + this.log = log; + this.folder = folder; + } + + @Override + public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException { + String username = computeUsername(recipient); + + mailboxAppender.append(mail.getMessage(), username, folder); + + log.info("Local delivered mail " + mail.getName() + " successfully from " + DeliveryUtils.prettyPrint(sender) + + " to " + DeliveryUtils.prettyPrint(recipient) + " in folder " + this.folder); + } + + private String computeUsername(MailAddress recipient) throws MessagingException { + try { + return usersRepository.getUser(recipient); + } catch (UsersRepositoryException e) { + log.error("Unable to access UsersRepository", e); + return recipient.toString(); + } + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java deleted file mode 100644 index 902edfd..0000000 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java +++ /dev/null @@ -1,103 +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.delivery; - -import javax.mail.MessagingException; - -import org.apache.commons.logging.Log; -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 com.google.common.base.Preconditions; - -public class SimpleMailStorer implements MailStorer { - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private UsersRepository usersRepos; - private MailboxAppender mailboxAppender; - private String folder; - private Log log; - - public Builder folder(String folder) { - this.folder = folder; - return this; - } - - public Builder usersRepository(UsersRepository usersRepository) { - this.usersRepos = usersRepository; - return this; - } - - public Builder mailboxAppender(MailboxAppender mailboxAppender) { - this.mailboxAppender = mailboxAppender; - return this; - } - - public Builder log(Log log) { - this.log = log; - return this; - } - - public SimpleMailStorer build() throws MessagingException { - Preconditions.checkNotNull(usersRepos); - Preconditions.checkNotNull(folder); - Preconditions.checkNotNull(log); - Preconditions.checkNotNull(mailboxAppender); - return new SimpleMailStorer(mailboxAppender, usersRepos, log, folder); - } - } - - private final MailboxAppender mailboxAppender; - private final UsersRepository usersRepository; - private final Log log; - private final String folder; - - private SimpleMailStorer(MailboxAppender mailboxAppender, UsersRepository usersRepository, Log log, String folder) { - this.mailboxAppender = mailboxAppender; - this.usersRepository = usersRepository; - this.log = log; - this.folder = folder; - } - - @Override - public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException { - String username = computeUsername(recipient); - - mailboxAppender.append(mail.getMessage(), username, folder); - - log.info("Local delivered mail " + mail.getName() + " successfully from " + DeliveryUtils.prettyPrint(sender) - + " to " + DeliveryUtils.prettyPrint(recipient) + " in folder " + this.folder); - } - - private String computeUsername(MailAddress recipient) throws MessagingException { - try { - return usersRepository.getUser(recipient); - } catch (UsersRepositoryException e) { - log.error("Unable to access UsersRepository", e); - return recipient.toString(); - } - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStore.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStore.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStore.java new file mode 100644 index 0000000..fcdf8a3 --- /dev/null +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStore.java @@ -0,0 +1,198 @@ +/**************************************************************** + * 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.jsieve.delivery; + +import java.io.IOException; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; + +import org.apache.commons.logging.Log; +import org.apache.james.transport.mailets.delivery.DeliveryUtils; +import org.apache.james.transport.mailets.delivery.MailStore; +import org.apache.james.transport.mailets.jsieve.ActionDispatcher; +import org.apache.james.transport.mailets.jsieve.ResourceLocator; +import org.apache.james.transport.mailets.jsieve.SieveMailAdapter; +import org.apache.james.user.api.UsersRepository; +import org.apache.james.user.api.UsersRepositoryException; +import org.apache.jsieve.ConfigurationManager; +import org.apache.jsieve.SieveConfigurationException; +import org.apache.jsieve.SieveFactory; +import org.apache.jsieve.exception.SieveException; +import org.apache.jsieve.parser.generated.ParseException; +import org.apache.jsieve.parser.generated.TokenMgrError; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.apache.mailet.MailetContext; + +import com.google.common.base.Preconditions; + +public class SieveMailStore implements MailStore { + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private MailetContext mailetContext; + private UsersRepository usersRepos; + private SievePoster sievePoster; + private String folder; + private ResourceLocator resourceLocator; + private Log log; + + public Builder folder(String folder) { + this.folder = folder; + return this; + } + + public Builder usersRepository(UsersRepository usersRepository) { + this.usersRepos = usersRepository; + return this; + } + + public Builder sievePoster(SievePoster sievePoster) { + this.sievePoster = sievePoster; + return this; + } + + public Builder mailetContext(MailetContext mailetContext) { + this.mailetContext = mailetContext; + return this; + } + + public Builder resourceLocator(ResourceLocator resourceLocator) { + this.resourceLocator = resourceLocator; + return this; + } + + public Builder log(Log log) { + this.log = log; + return this; + } + + public SieveMailStore build() throws MessagingException { + Preconditions.checkNotNull(mailetContext); + Preconditions.checkNotNull(usersRepos); + Preconditions.checkNotNull(folder); + Preconditions.checkNotNull(resourceLocator); + Preconditions.checkNotNull(log); + Preconditions.checkNotNull(sievePoster); + return new SieveMailStore(mailetContext, usersRepos, sievePoster, folder, resourceLocator, log); + } + } + + private final MailetContext mailetContext; + private final UsersRepository usersRepos; + private final SievePoster sievePoster; + private final String folder; + private final ResourceLocator resourceLocator; + private final SieveFactory factory; + private final ActionDispatcher actionDispatcher; + private final Log log; + + public SieveMailStore(MailetContext mailetContext, UsersRepository usersRepos, SievePoster sievePoster, String folder, + ResourceLocator resourceLocator, Log log) throws MessagingException { + this.mailetContext = mailetContext; + this.usersRepos = usersRepos; + this.sievePoster = sievePoster; + this.folder = folder; + this.resourceLocator = resourceLocator; + try { + final ConfigurationManager configurationManager = new ConfigurationManager(); + configurationManager.setLog(log); + factory = configurationManager.build(); + } catch (SieveConfigurationException e) { + throw new MessagingException("Failed to load standard Sieve configuration.", e); + } + this.actionDispatcher = new ActionDispatcher(); + this.log = log; + } + + public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException { + Preconditions.checkNotNull(recipient, "Recipient for mail to be spooled cannot be null."); + Preconditions.checkNotNull(mail.getMessage(), "Mail message to be spooled cannot be null."); + + sieveMessage(recipient, mail, log); + // If no exception was thrown the message was successfully stored in the mailbox + log.info("Local delivered mail " + mail.getName() + " sucessfully from " + DeliveryUtils.prettyPrint(sender) + " to " + DeliveryUtils.prettyPrint(recipient) + + " in folder " + this.folder); + } + + protected void sieveMessage(MailAddress recipient, Mail aMail, Log log) throws MessagingException { + try { + ResourceLocator.UserSieveInformation userSieveInformation = resourceLocator.get(getScriptUri(recipient)); + sieveMessageEvaluate(recipient, aMail, userSieveInformation, log); + } catch (Exception ex) { + // SIEVE is a mail filtering protocol. + // Rejecting the mail because it cannot be filtered + // seems very unfriendly. + // So just log and store in INBOX + log.error("Cannot evaluate Sieve script. Storing mail in user INBOX.", ex); + storeMessageInbox(recipient, aMail.getMessage()); + } + } + + private void sieveMessageEvaluate(MailAddress recipient, Mail aMail, ResourceLocator.UserSieveInformation userSieveInformation, Log log) throws MessagingException, IOException { + try { + SieveMailAdapter aMailAdapter = new SieveMailAdapter(aMail, + mailetContext, actionDispatcher, sievePoster, userSieveInformation.getScriptActivationDate(), + userSieveInformation.getScriptInterpretationDate(), recipient); + aMailAdapter.setLog(log); + // This logging operation is potentially costly + log.debug("Evaluating " + aMailAdapter.toString() + "against \"" + getScriptUri(recipient) + "\""); + factory.evaluate(aMailAdapter, factory.parse(userSieveInformation.getScriptContent())); + } catch (SieveException ex) { + handleFailure(recipient, aMail, ex); + } + catch (ParseException ex) { + handleFailure(recipient, aMail, ex); + } + catch (TokenMgrError ex) { + handleFailure(recipient, aMail, new SieveException(ex)); + } + } + + protected String getScriptUri(MailAddress m) { + return "//" + retrieveUserNameUsedForScriptStorage(m) + "/sieve"; + } + + protected void handleFailure(MailAddress recipient, Mail aMail, Exception ex) throws MessagingException, IOException { + storeMessageInbox(recipient, SieveFailureMessageComposer.composeMessage(aMail, ex, recipient.toString())); + } + + protected void storeMessageInbox(MailAddress mailAddress, MimeMessage message) throws MessagingException { + sievePoster.post("mailbox://" + retrieveUserNameUsedForScriptStorage(mailAddress) + "/", message); + } + + public String retrieveUserNameUsedForScriptStorage(MailAddress mailAddress) { + try { + if (usersRepos.supportVirtualHosting()) { + return mailAddress.print(); + } else { + return mailAddress.getLocalPart() + "@localhost"; + } + } catch (UsersRepositoryException e) { + log.error("Unable to access UsersRepository", e); + return mailAddress.getLocalPart() + "@localhost"; + } + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java deleted file mode 100644 index 1ec3489..0000000 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java +++ /dev/null @@ -1,198 +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.jsieve.delivery; - -import java.io.IOException; - -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; - -import org.apache.commons.logging.Log; -import org.apache.james.transport.mailets.delivery.DeliveryUtils; -import org.apache.james.transport.mailets.delivery.MailStorer; -import org.apache.james.transport.mailets.jsieve.ActionDispatcher; -import org.apache.james.transport.mailets.jsieve.ResourceLocator; -import org.apache.james.transport.mailets.jsieve.SieveMailAdapter; -import org.apache.james.user.api.UsersRepository; -import org.apache.james.user.api.UsersRepositoryException; -import org.apache.jsieve.ConfigurationManager; -import org.apache.jsieve.SieveConfigurationException; -import org.apache.jsieve.SieveFactory; -import org.apache.jsieve.exception.SieveException; -import org.apache.jsieve.parser.generated.ParseException; -import org.apache.jsieve.parser.generated.TokenMgrError; -import org.apache.mailet.Mail; -import org.apache.mailet.MailAddress; -import org.apache.mailet.MailetContext; - -import com.google.common.base.Preconditions; - -public class SieveMailStorer implements MailStorer { - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private MailetContext mailetContext; - private UsersRepository usersRepos; - private SievePoster sievePoster; - private String folder; - private ResourceLocator resourceLocator; - private Log log; - - public Builder folder(String folder) { - this.folder = folder; - return this; - } - - public Builder usersRepository(UsersRepository usersRepository) { - this.usersRepos = usersRepository; - return this; - } - - public Builder sievePoster(SievePoster sievePoster) { - this.sievePoster = sievePoster; - return this; - } - - public Builder mailetContext(MailetContext mailetContext) { - this.mailetContext = mailetContext; - return this; - } - - public Builder resourceLocator(ResourceLocator resourceLocator) { - this.resourceLocator = resourceLocator; - return this; - } - - public Builder log(Log log) { - this.log = log; - return this; - } - - public SieveMailStorer build() throws MessagingException { - Preconditions.checkNotNull(mailetContext); - Preconditions.checkNotNull(usersRepos); - Preconditions.checkNotNull(folder); - Preconditions.checkNotNull(resourceLocator); - Preconditions.checkNotNull(log); - Preconditions.checkNotNull(sievePoster); - return new SieveMailStorer(mailetContext, usersRepos, sievePoster, folder, resourceLocator, log); - } - } - - private final MailetContext mailetContext; - private final UsersRepository usersRepos; - private final SievePoster sievePoster; - private final String folder; - private final ResourceLocator resourceLocator; - private final SieveFactory factory; - private final ActionDispatcher actionDispatcher; - private final Log log; - - public SieveMailStorer(MailetContext mailetContext, UsersRepository usersRepos, SievePoster sievePoster, String folder, - ResourceLocator resourceLocator, Log log) throws MessagingException { - this.mailetContext = mailetContext; - this.usersRepos = usersRepos; - this.sievePoster = sievePoster; - this.folder = folder; - this.resourceLocator = resourceLocator; - try { - final ConfigurationManager configurationManager = new ConfigurationManager(); - configurationManager.setLog(log); - factory = configurationManager.build(); - } catch (SieveConfigurationException e) { - throw new MessagingException("Failed to load standard Sieve configuration.", e); - } - this.actionDispatcher = new ActionDispatcher(); - this.log = log; - } - - public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException { - Preconditions.checkNotNull(recipient, "Recipient for mail to be spooled cannot be null."); - Preconditions.checkNotNull(mail.getMessage(), "Mail message to be spooled cannot be null."); - - sieveMessage(recipient, mail, log); - // If no exception was thrown the message was successfully stored in the mailbox - log.info("Local delivered mail " + mail.getName() + " sucessfully from " + DeliveryUtils.prettyPrint(sender) + " to " + DeliveryUtils.prettyPrint(recipient) - + " in folder " + this.folder); - } - - protected void sieveMessage(MailAddress recipient, Mail aMail, Log log) throws MessagingException { - try { - ResourceLocator.UserSieveInformation userSieveInformation = resourceLocator.get(getScriptUri(recipient)); - sieveMessageEvaluate(recipient, aMail, userSieveInformation, log); - } catch (Exception ex) { - // SIEVE is a mail filtering protocol. - // Rejecting the mail because it cannot be filtered - // seems very unfriendly. - // So just log and store in INBOX - log.error("Cannot evaluate Sieve script. Storing mail in user INBOX.", ex); - storeMessageInbox(recipient, aMail.getMessage()); - } - } - - private void sieveMessageEvaluate(MailAddress recipient, Mail aMail, ResourceLocator.UserSieveInformation userSieveInformation, Log log) throws MessagingException, IOException { - try { - SieveMailAdapter aMailAdapter = new SieveMailAdapter(aMail, - mailetContext, actionDispatcher, sievePoster, userSieveInformation.getScriptActivationDate(), - userSieveInformation.getScriptInterpretationDate(), recipient); - aMailAdapter.setLog(log); - // This logging operation is potentially costly - log.debug("Evaluating " + aMailAdapter.toString() + "against \"" + getScriptUri(recipient) + "\""); - factory.evaluate(aMailAdapter, factory.parse(userSieveInformation.getScriptContent())); - } catch (SieveException ex) { - handleFailure(recipient, aMail, ex); - } - catch (ParseException ex) { - handleFailure(recipient, aMail, ex); - } - catch (TokenMgrError ex) { - handleFailure(recipient, aMail, new SieveException(ex)); - } - } - - protected String getScriptUri(MailAddress m) { - return "//" + retrieveUserNameUsedForScriptStorage(m) + "/sieve"; - } - - protected void handleFailure(MailAddress recipient, Mail aMail, Exception ex) throws MessagingException, IOException { - storeMessageInbox(recipient, SieveFailureMessageComposer.composeMessage(aMail, ex, recipient.toString())); - } - - protected void storeMessageInbox(MailAddress mailAddress, MimeMessage message) throws MessagingException { - sievePoster.post("mailbox://" + retrieveUserNameUsedForScriptStorage(mailAddress) + "/", message); - } - - public String retrieveUserNameUsedForScriptStorage(MailAddress mailAddress) { - try { - if (usersRepos.supportVirtualHosting()) { - return mailAddress.print(); - } else { - return mailAddress.getLocalPart() + "@localhost"; - } - } catch (UsersRepositoryException e) { - log.error("Unable to access UsersRepository", e); - return mailAddress.getLocalPart() + "@localhost"; - } - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java index db77940..3c8de2b 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java @@ -56,12 +56,12 @@ import com.google.common.collect.ImmutableList; public class MailDispatcherTest { private FakeMailContext fakeMailContext; - private MailStorer mailStorer; + private MailStore mailStore; @Before public void setUp() throws Exception { fakeMailContext = FakeMailContext.defaultContext(); - mailStorer = mock(MailStorer.class); + mailStore = mock(MailStore.class); } @Test @@ -69,7 +69,7 @@ public class MailDispatcherTest { MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) - .mailStorer(mailStorer) + .mailStorer(mailStore) .consume(true) .build(); @@ -81,9 +81,9 @@ public class MailDispatcherTest { .build(); testee.dispatch(mail); - verify(mailStorer).storeMail(MailAddressFixture.OTHER_AT_JAMES, MailAddressFixture.ANY_AT_JAMES, mail); - verify(mailStorer).storeMail(MailAddressFixture.OTHER_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2, mail); - verifyNoMoreInteractions(mailStorer); + verify(mailStore).storeMail(MailAddressFixture.OTHER_AT_JAMES, MailAddressFixture.ANY_AT_JAMES, mail); + verify(mailStore).storeMail(MailAddressFixture.OTHER_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2, mail); + verifyNoMoreInteractions(mailStore); } @Test @@ -91,7 +91,7 @@ public class MailDispatcherTest { MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) - .mailStorer(mailStorer) + .mailStorer(mailStore) .consume(true) .build(); @@ -110,7 +110,7 @@ public class MailDispatcherTest { MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) - .mailStorer(mailStorer) + .mailStorer(mailStore) .consume(false) .build(); @@ -130,11 +130,11 @@ public class MailDispatcherTest { MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) - .mailStorer(mailStorer) + .mailStorer(mailStore) .consume(true) .build(); doThrow(new MessagingException()) - .when(mailStorer) + .when(mailStore) .storeMail(any(MailAddress.class), any(MailAddress.class), any(Mail.class)); MimeMessage mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties())); @@ -173,7 +173,7 @@ public class MailDispatcherTest { MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) - .mailStorer(mailStorer) + .mailStorer(mailStore) .consume(false) .build(); @@ -186,7 +186,7 @@ public class MailDispatcherTest { testee.dispatch(mail); ArgumentCaptor<Mail> mailCaptor = ArgumentCaptor.forClass(Mail.class); - verify(mailStorer).storeMail(any(MailAddress.class), any(MailAddress.class), mailCaptor.capture()); + verify(mailStore).storeMail(any(MailAddress.class), any(MailAddress.class), mailCaptor.capture()); assertThat(mailCaptor.getValue().getMessage().getHeader(RFC2822Headers.RETURN_PATH)) .containsExactly("<" + MailAddressFixture.OTHER_AT_JAMES +">"); @@ -197,7 +197,7 @@ public class MailDispatcherTest { MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) - .mailStorer(mailStorer) + .mailStorer(mailStore) .consume(false) .build(); @@ -219,7 +219,7 @@ public class MailDispatcherTest { @Test public void dispatchShouldCustomizeDeliveredToHeader() throws Exception { - AccumulatorDeliveredToHeaderMailStorer accumulator = new AccumulatorDeliveredToHeaderMailStorer(); + AccumulatorDeliveredToHeaderMailStore accumulator = new AccumulatorDeliveredToHeaderMailStore(); MailDispatcher testee = MailDispatcher.builder() .log(mock(Log.class)) .mailetContext(fakeMailContext) @@ -240,10 +240,10 @@ public class MailDispatcherTest { new String[]{MailAddressFixture.ANY_AT_JAMES2.toString()}); } - public static class AccumulatorDeliveredToHeaderMailStorer implements MailStorer { + public static class AccumulatorDeliveredToHeaderMailStore implements MailStore { public final List<String[]> deliveredToHeaderValues; - public AccumulatorDeliveredToHeaderMailStorer() { + public AccumulatorDeliveredToHeaderMailStore() { this.deliveredToHeaderValues = new ArrayList<String[]>(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java index 3aaaf68..9582add 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java @@ -51,7 +51,7 @@ 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.jsieve.ResourceLocator; -import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStorer; +import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStore; import org.apache.james.transport.mailets.jsieve.delivery.SievePoster; import org.apache.james.user.api.UsersRepository; import org.apache.mailet.Mail; @@ -90,7 +90,7 @@ public class SieveIntegrationTest { public static final MailboxPath SELECTED_MAILBOX = new MailboxPath("#private", "receiver", "INBOX.select"); public static final MailboxPath INBOX = new MailboxPath("#private", "receiver", "INBOX"); - private MailStorer testee; + private MailStore testee; private UsersRepository usersRepository; private MailboxManager mailboxManager; private ResourceLocator resourceLocator; @@ -105,7 +105,7 @@ public class SieveIntegrationTest { fakeMailContext = FakeMailContext.defaultContext(); sender = new MailAddress("sender@any"); - testee = SieveMailStorer.builder() + testee = SieveMailStore.builder() .resourceLocator(resourceLocator) .usersRepository(usersRepository) .folder("INBOX") http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java new file mode 100644 index 0000000..3566362 --- /dev/null +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java @@ -0,0 +1,118 @@ +/**************************************************************** + * 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 static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Properties; + +import javax.activation.DataHandler; +import javax.mail.Multipart; +import javax.mail.Session; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import javax.mail.util.ByteArrayDataSource; + +import org.apache.commons.logging.Log; +import org.apache.james.user.api.UsersRepository; +import org.apache.james.user.api.UsersRepositoryException; +import org.apache.mailet.MailAddress; +import org.apache.mailet.base.MailAddressFixture; +import org.apache.mailet.base.test.FakeMail; +import org.junit.Before; +import org.junit.Test; + +public class SimpleMailStoreTest { + + public static final String FOLDER = "FOLDER"; + private SimpleMailStore testee; + private MailboxAppender mailboxAppender; + private UsersRepository usersRepository; + private MimeMessage mimeMessage; + + @Before + public void setUp() throws Exception { + mailboxAppender = mock(MailboxAppender.class); + usersRepository = mock(UsersRepository.class); + testee = SimpleMailStore.builder() + .usersRepository(usersRepository) + .mailboxAppender(mailboxAppender) + .folder(FOLDER) + .log(mock(Log.class)) + .build(); + + mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties())); + Multipart multipart = new MimeMultipart(); + MimeBodyPart bodyPart = new MimeBodyPart(); + bodyPart.setDataHandler( + new DataHandler( + new ByteArrayDataSource( + "toto", + "text/plain; charset=UTF-8") + )); + multipart.addBodyPart(bodyPart); + mimeMessage.setContent(multipart); + mimeMessage.saveChanges(); + } + + @Test + public void storeMailShouldUseFullMailAddressWhenSupportsVirtualHosting() throws Exception { + MailAddress sender = MailAddressFixture.ANY_AT_JAMES; + MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; + when(usersRepository.getUser(recipient)).thenReturn(recipient.print()); + FakeMail mail = FakeMail.builder() + .mimeMessage(mimeMessage) + .build(); + testee.storeMail(sender, recipient, mail); + + verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.print()), eq(FOLDER)); + } + + @Test + public void storeMailShouldUseLocalPartWhenSupportsVirtualHosting() throws Exception { + MailAddress sender = MailAddressFixture.ANY_AT_JAMES; + MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; + when(usersRepository.getUser(recipient)).thenReturn(recipient.getLocalPart()); + FakeMail mail = FakeMail.builder() + .mimeMessage(mimeMessage) + .build(); + testee.storeMail(sender, recipient, mail); + + verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.getLocalPart()), eq(FOLDER)); + } + + @Test + public void storeMailShouldUseFullMailAddressWhenErrorReadingUsersRepository() throws Exception { + MailAddress sender = MailAddressFixture.ANY_AT_JAMES; + MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; + when(usersRepository.getUser(recipient)).thenThrow(new UsersRepositoryException("Any message")); + FakeMail mail = FakeMail.builder() + .mimeMessage(mimeMessage) + .build(); + testee.storeMail(sender, recipient, mail); + + verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.toString()), eq(FOLDER)); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/42800ae5/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java deleted file mode 100644 index 42e831a..0000000 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java +++ /dev/null @@ -1,118 +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.delivery; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Properties; - -import javax.activation.DataHandler; -import javax.mail.Multipart; -import javax.mail.Session; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; -import javax.mail.util.ByteArrayDataSource; - -import org.apache.commons.logging.Log; -import org.apache.james.user.api.UsersRepository; -import org.apache.james.user.api.UsersRepositoryException; -import org.apache.mailet.MailAddress; -import org.apache.mailet.base.MailAddressFixture; -import org.apache.mailet.base.test.FakeMail; -import org.junit.Before; -import org.junit.Test; - -public class SimpleMailStorerTest { - - public static final String FOLDER = "FOLDER"; - private SimpleMailStorer testee; - private MailboxAppender mailboxAppender; - private UsersRepository usersRepository; - private MimeMessage mimeMessage; - - @Before - public void setUp() throws Exception { - mailboxAppender = mock(MailboxAppender.class); - usersRepository = mock(UsersRepository.class); - testee = SimpleMailStorer.builder() - .usersRepository(usersRepository) - .mailboxAppender(mailboxAppender) - .folder(FOLDER) - .log(mock(Log.class)) - .build(); - - mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties())); - Multipart multipart = new MimeMultipart(); - MimeBodyPart bodyPart = new MimeBodyPart(); - bodyPart.setDataHandler( - new DataHandler( - new ByteArrayDataSource( - "toto", - "text/plain; charset=UTF-8") - )); - multipart.addBodyPart(bodyPart); - mimeMessage.setContent(multipart); - mimeMessage.saveChanges(); - } - - @Test - public void storeMailShouldUseFullMailAddressWhenSupportsVirtualHosting() throws Exception { - MailAddress sender = MailAddressFixture.ANY_AT_JAMES; - MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; - when(usersRepository.getUser(recipient)).thenReturn(recipient.print()); - FakeMail mail = FakeMail.builder() - .mimeMessage(mimeMessage) - .build(); - testee.storeMail(sender, recipient, mail); - - verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.print()), eq(FOLDER)); - } - - @Test - public void storeMailShouldUseLocalPartWhenSupportsVirtualHosting() throws Exception { - MailAddress sender = MailAddressFixture.ANY_AT_JAMES; - MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; - when(usersRepository.getUser(recipient)).thenReturn(recipient.getLocalPart()); - FakeMail mail = FakeMail.builder() - .mimeMessage(mimeMessage) - .build(); - testee.storeMail(sender, recipient, mail); - - verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.getLocalPart()), eq(FOLDER)); - } - - @Test - public void storeMailShouldUseFullMailAddressWhenErrorReadingUsersRepository() throws Exception { - MailAddress sender = MailAddressFixture.ANY_AT_JAMES; - MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; - when(usersRepository.getUser(recipient)).thenThrow(new UsersRepositoryException("Any message")); - FakeMail mail = FakeMail.builder() - .mimeMessage(mimeMessage) - .build(); - testee.storeMail(sender, recipient, mail); - - verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.toString()), eq(FOLDER)); - } -} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
