JAMES-1854 ToSender can use MailboxAppender
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3b995e9e Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3b995e9e Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3b995e9e Branch: refs/heads/master Commit: 3b995e9e8f24c88f6d7b449b9e69714e3afa8929 Parents: 9251503 Author: Benoit Tellier <[email protected]> Authored: Mon Nov 21 11:15:16 2016 +0700 Committer: Benoit Tellier <[email protected]> Committed: Wed Nov 23 18:19:36 2016 +0700 ---------------------------------------------------------------------- .../james/transport/mailets/ToSenderFolder.java | 85 ++++---------------- 1 file changed, 16 insertions(+), 69 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/3b995e9e/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java index ccaa94c..36479ca 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java @@ -18,20 +18,12 @@ ****************************************************************/ package org.apache.james.transport.mailets; -import java.util.Date; - import javax.inject.Inject; import javax.inject.Named; import javax.mail.MessagingException; -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.delivery.MailboxAppender; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; import org.apache.mailet.Mail; @@ -56,15 +48,17 @@ import org.apache.mailet.base.GenericMailet; */ public class ToSenderFolder extends GenericMailet { - @Inject - private UsersRepository usersRepository; - - @Inject - @Named("mailboxmanager") - private MailboxManager mailboxManager; - + private final UsersRepository usersRepository; + private final MailboxManager mailboxManager; private String folder; private boolean consume; + private MailboxAppender mailboxAppender; + + @Inject + public ToSenderFolder(UsersRepository usersRepository, @Named("mailboxmanager") MailboxManager mailboxManager) { + this.usersRepository = usersRepository; + this.mailboxManager = mailboxManager; + } /** * Delivers a mail to a local mailbox in a given folder. @@ -82,52 +76,12 @@ public class ToSenderFolder extends GenericMailet { } private void doService(Mail mail) throws MessagingException { - - final MailAddress sender = mail.getSender(); + MailAddress sender = mail.getSender(); String username = retrieveUser(sender); - final MailboxSession session; - try { - session = mailboxManager.createSystemSession(username, getMailetContext().getLogger()); - } catch (BadCredentialsException e) { - throw new MessagingException("Unable to authenticate to mailbox", e); - } catch (MailboxException e) { - throw new MessagingException("Can not access mailbox", e); - } - - mailboxManager.startProcessingRequest(session); - - final MailboxPath path = new MailboxPath(MailboxConstants.USER_NAMESPACE, username, this.folder); - - try { - - if (this.folder.equalsIgnoreCase(folder) && !(mailboxManager.mailboxExists(path, session))) { - mailboxManager.createMailbox(path, session); - } - final MessageManager mailbox = mailboxManager.getMailbox(path, session); - if (mailbox == null) { - final String error = "Mailbox for username " + username + " was not found on this server."; - throw new MessagingException(error); - } - - mailbox.appendMessage(new MimeMessageInputStream(mail.getMessage()), new Date(), session, true, null); - - log("Local delivery with ToSenderFolder mailet for mail " + mail.getName() + " with sender " + sender.toString() + " in folder " + this.folder); - - } 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); - } - - mailboxManager.endProcessingRequest(session); - - } + mailboxAppender.append(mail.getMessage(), username, folder); + log("Local delivery with ToSenderFolder mailet for mail " + mail.getName() + " with sender " + sender.toString() + " in folder " + folder); } private String retrieveUser(MailAddress sender) throws MessagingException { @@ -138,20 +92,13 @@ public class ToSenderFolder extends GenericMailet { } } - /* (non-Javadoc) - * @see org.apache.mailet.base.GenericMailet#init() - */ @Override public void init() throws MessagingException { - super.init(); - this.folder = getInitParameter("folder", "Sent"); - this.consume = getInitParameter("consume", false); - + folder = getInitParameter("folder", "Sent"); + consume = getInitParameter("consume", false); + mailboxAppender = new MailboxAppender(mailboxManager, getMailetContext().getLogger()); } - /* (non-Javadoc) - * @see org.apache.mailet.base.GenericMailet#getMailetInfo() - */ @Override public String getMailetInfo() { return ToSenderFolder.class.getName() + " Mailet"; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
