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]

Reply via email to