Sorry forgot to link to the jar:

https://repository.apache.org/content/groups/snapshots/org/apache/james/apache-james-mailbox-jpa/0.4-SNAPSHOT/apache-james-mailbox-jpa-0.4-20110713.042245-27.jar


Be,
Norman

Am 13.07.2011 07:28, schrieb Norman Maurer:
Hi there,

you need to use this two files content:

conf/META-INF/persistence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd";
    version="2.0">

<persistence-unit name="James" transaction-type="RESOURCE_LOCAL">
<class>org.apache.james.mailbox.jpa.mail.model.JPAMailbox</class>
<class>org.apache.james.mailbox.jpa.mail.model.JPAUserFlag</class>
<class>org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage</class> <class>org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMessage</class>
<class>org.apache.james.mailbox.jpa.mail.model.JPAProperty</class>
<class>org.apache.james.mailbox.jpa.user.model.JPASubscription</class>
<class>org.apache.james.domainlist.jpa.model.JPADomain</class>
<class>org.apache.james.user.jpa.model.JPAUser</class>
<class>org.apache.james.rrt.jpa.model.JPARecipientRewrite</class>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> <property name="openjpa.jdbc.MappingDefaults" value="ForeignKeyDeleteAction=cascade, JoinForeignKeyDeleteAction=cascade"/> <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
<property name="openjpa.jdbc.QuerySQLCache" value="false"/>
</properties>

</persistence-unit>

</persistence>


conf/james-mailbox-jpa-context.xml:
<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xsi:schemaLocation="
http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
<!--
      Mailbox JPA
     -->

<bean id="jpa-locker" class="org.apache.james.mailbox.store.JVMMailboxPathLocker"/>

<bean id="jpa-mailboxmanager" class="org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager" init-method="init">
<constructor-arg index="0" ref="jpa-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
<constructor-arg index="2" ref="jpa-locker"/>
<constructor-arg index="3" value="YOURPASSWORD"/>
</bean>
<bean id ="jpa-subscriptionManager" class="org.apache.james.mailbox.jpa.JPASubscriptionManager">
<constructor-arg index="0" ref="jpa-sessionMapperFactory"/>
</bean>
<bean id="jpa-sessionMapperFactory" class="org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory">
<constructor-arg index="0" ref="entityManagerFactory"/>
<constructor-arg index="1" ref="jpa-uidProvider"/>
<constructor-arg index="2" ref="jpa-modSeqProvider"/>
</bean>
<bean id="jpa-uidProvider" class="org.apache.james.mailbox.jpa.mail.JPAUidProvider">
<constructor-arg index="0" ref="jpa-locker"/>
<constructor-arg index="1" ref="entityManagerFactory"/>
</bean>

<bean id="jpa-modSeqProvider" class="org.apache.james.mailbox.jpa.mail.JPAModSeqProvider">
<constructor-arg index="0" ref="jpa-locker"/>
<constructor-arg index="1" ref="entityManagerFactory"/>
</bean>

</beans>


Let me know how it work out...

Bye,
Norman




Am 13.07.2011 03:16, schrieb Saibabu Vallurupalli:
Hi Norman, I am going through the fix and trying to find how to setup
password for Encryption. Is it going to be part of configuration? How to set
the value of AdvancedFeature to use Encryption?

I am planning to start my upgrade process tomorrow morning. Can you point me
to the latest Binaries includes this fix?

Thank you,
Sai


On Tue, Jul 12, 2011 at 2:00 PM, Norman Maurer<norman.mau...@googlemail.com
wrote:
Its in 0.4-SNAPSHOT version of mailbox which is atm compatible with
0.3 and should also stay so...

Bye,
Norman


2011/7/12 Saibabu Vallurupalli<saibabu.vallurupa...@gmail.com>:
Hi Norman,

Thank you for applying the patch. Since I am in process of upgrading our Apache James thought of checking with you on next James release this fix
is
going to be available?

Please advise.

Thank you,
Sai


On Tue, Jul 12, 2011 at 1:40 PM,<nor...@apache.org>  wrote:

Author: norman
Date: Tue Jul 12 17:40:49 2011
New Revision: 1145691

URL: http://svn.apache.org/viewvc?rev=1145691&view=rev
Log:
Add support for encrypted Headers and Body of the message when using
JPA.
This work is a modified version of the classes attached to MAILBOX-102. Thanks again to Valluripalli, Sai for the code. We love contributions :)

Added:


james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAEncryptedMessage.java
Modified:
    james/mailbox/trunk/jpa/pom.xml


james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
    james/mailbox/trunk/pom.xml

Modified: james/mailbox/trunk/jpa/pom.xml
URL:

http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/pom.xml?rev=1145691&r1=1145690&r2=1145691&view=diff

==============================================================================
--- james/mailbox/trunk/jpa/pom.xml (original)
+++ james/mailbox/trunk/jpa/pom.xml Tue Jul 12 17:40:49 2011
@@ -48,7 +48,10 @@
<groupId>${javax.mail.groupId}</groupId>
<artifactId>${javax.mail.artifactId}</artifactId>
</dependency>
-
+<dependency>
+<groupId>org.jasypt</groupId>
+<artifactId>jasypt</artifactId>
+</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit-dep</artifactId>
@@ -100,7 +103,7 @@
</property>
<property>
<name>metaDataFactory</name>
-

<value>jpa(Types=org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;org.apache.james.mailbox.jpa.mail.model.JPAHeader;org.apache.james.mailbox.jpa.mail.model.JPAMailbox;org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;org.apache.james.mailbox.jpa.mail.model.JPAProperty;org.apache.james.mailbox.jpa.user.model.JPASubscription)</value>
+

<value>jpa(Types=org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;org.apache.james.mailbox.jpa.mail.model.JPAMailbox;org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;org.apache.james.mailbox.jpa.mail.model.JPAProperty;org.apache.james.mailbox.jpa.user.model.JPASubscription)</value>
</property>
</toolProperties>
</configuration>

Added:

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java
URL:

http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java?rev=1145691&view=auto

==============================================================================
---

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java
(added)
+++

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java
Tue Jul 12 17:40:49 2011
@@ -0,0 +1,66 @@
+/****************************************************************
+ * 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.mailbox.jpa.mail.model.openjpa;
+
+import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
+
+/**
+ * Helper class for encrypt and de-crypt data
+ *
+ *
+ */
+public class EncryptDecryptHelper {
+
+    // Use one static instance as it is thread safe
+    private static StandardPBEByteEncryptor encryptor = new
StandardPBEByteEncryptor();
+
+
+    /**
+     * Set the password for encrypt / de-crypt. This MUST be done
before
+     * the usage of {@link #getDecrypted(byte[])} and {@link
#getEncrypted(byte[])}.
+     *
+     * So to be safe its the best to call this in a constructor
+     *
+     * @param pass
+     */
+    public static void init(String pass) {
+        encryptor.setPassword(pass);
+    }
+
+    /**
+     * Encrypt the given array and return the encrypted one
+     *
+     * @param array
+     * @return enc-array
+     */
+    public static byte[] getEncrypted(byte[] array) {
+        return encryptor.encrypt(array);
+    }
+
+    /**
+     * Decrypt the given array and return the de-crypted one
+     *
+     * @param array
+     * @return dec-array
+     */
+    public static byte[] getDecrypted(byte[] array) {
+        return encryptor.decrypt(array);
+    }
+
+}

Added:

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAEncryptedMessage.java
URL:

http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAEncryptedMessage.java?rev=1145691&view=auto

==============================================================================
---

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAEncryptedMessage.java
(added)
+++

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAEncryptedMessage.java
Tue Jul 12 17:40:49 2011
@@ -0,0 +1,115 @@
+/****************************************************************
+ * 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.mailbox.jpa.mail.model.openjpa;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+
+import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
+import org.apache.james.mailbox.store.mail.model.Message;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.openjpa.persistence.Externalizer;
+import org.apache.openjpa.persistence.Factory;
+
+@Entity(name="Message")
+@Table(name="JAMES_MAIL")
+public class JPAEncryptedMessage extends AbstractJPAMessage {
+
+        /** The value for the body field. Lazy loaded */
+        /** We use a max length to represent 1gb data. Thats prolly
overkill, but who knows */
+        @Basic(optional = false, fetch = FetchType.LAZY)
+        @Column(name = "MAIL_BYTES", length = 1048576000, nullable =
false)
+        @Externalizer("EncryptDecryptHelper.getEncrypted")
+        @Factory("EncryptDecryptHelper.getDecrypted")
+        @Lob private byte[] body;
+
+
+        /** The value for the header field. Lazy loaded */
+        /** We use a max length to represent 1gb data. Thats prolly
overkill, but who knows */
+        @Basic(optional = false, fetch = FetchType.LAZY)
+        @Column(name = "HEADER_BYTES", length = 10485760, nullable =
false)
+        @Externalizer("EncryptDecryptHelper.getEncrypted")
+        @Factory("EncryptDecryptHelper.getDecrypted")
+        @Lob private byte[] header;
+
+        @Deprecated
+        public JPAEncryptedMessage() {}
+
+        public JPAEncryptedMessage(JPAMailbox mailbox,Date
internalDate,
int size, Flags flags, SharedInputStream content, int bodyStartOctet,
final
PropertyBuilder propertyBuilder) throws MailboxException {
+ super(mailbox, internalDate, flags, size ,bodyStartOctet,
propertyBuilder);
+            try {
+                int headerEnd = bodyStartOctet -2;
+                if (headerEnd<  0) {
+                    headerEnd = 0;
+                }
+ this.header = IOUtils.toByteArray(content.newStream(0,
headerEnd));
+                this.body =
IOUtils.toByteArray(content.newStream(getBodyStartOctet(), -1));
+
+            } catch (IOException e) {
+                throw new MailboxException("Unable to parse
message",e);
+            }
+        }
+
+        /**
+         * Create a copy of the given message
+         *
+         * @param message
+         * @throws MailboxException
+         */
+ public JPAEncryptedMessage(JPAMailbox mailbox, long uid, long
modSeq, Message<?>  message) throws MailboxException{
+            super(mailbox, uid, modSeq, message);
+            try {
+                this.body =
IOUtils.toByteArray(message.getBodyContent());
+                this.header =
IOUtils.toByteArray(message.getHeaderContent());
+            } catch (IOException e) {
+                throw new MailboxException("Unable to parse
message",e);
+            }
+        }
+
+
+        /*
+         * (non-Javadoc)
+         * @see
org.apache.james.mailbox.store.mail.model.Message#getBodyContent()
+         */
+        public InputStream getBodyContent() throws IOException {
+            return new ByteArrayInputStream(body);
+        }
+
+        /*
+         * (non-Javadoc)
+         * @see
org.apache.james.mailbox.store.mail.model.Message#getHeaderContent()
+         */
+        public InputStream getHeaderContent() throws IOException {
+            return new ByteArrayInputStream(header);
+        }
+
+}

Modified:

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
URL:

http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java?rev=1145691&r1=1145690&r2=1145691&view=diff

==============================================================================
---

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
(original)
+++

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
Tue Jul 12 17:40:49 2011
@@ -25,6 +25,8 @@ import org.apache.james.mailbox.MailboxP
  import org.apache.james.mailbox.MailboxSession;
  import org.apache.james.mailbox.jpa.JPAMailboxManager;
  import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
+import
org.apache.james.mailbox.jpa.mail.model.openjpa.EncryptDecryptHelper;
+import

org.apache.james.mailbox.jpa.openjpa.OpenJPAMessageManager.AdvancedFeature;
  import org.apache.james.mailbox.store.Authenticator;
  import org.apache.james.mailbox.store.JVMMailboxPathLocker;
  import org.apache.james.mailbox.store.StoreMessageManager;
@@ -36,20 +38,34 @@ import org.apache.james.mailbox.store.ma
  */
  public class OpenJPAMailboxManager extends JPAMailboxManager {

-    private boolean useStreaming;
+    private AdvancedFeature feature;

     public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory
mapperFactory, Authenticator authenticator, MailboxPathLocker locker,
boolean useStreaming) {
         super(mapperFactory, authenticator,  locker);
-        this.useStreaming = useStreaming;
+        if (useStreaming) {
+            feature = AdvancedFeature.Streaming;
+        } else {
+            feature = AdvancedFeature.None;
+        }
     }

+    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory
mapperFactory, Authenticator authenticator, MailboxPathLocker locker,
  String encryptPass) {
+        super(mapperFactory, authenticator,  locker);
+        if (encryptPass != null) {
+            EncryptDecryptHelper.init(encryptPass);
+            feature = AdvancedFeature.Encryption;
+        } else {
+            feature = AdvancedFeature.None;
+        }
+    }
+
     public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory
mapperFactory, Authenticator authenticator) {
this(mapperFactory, authenticator, new JVMMailboxPathLocker(),
false);
     }

     @Override
     protected StoreMessageManager<Long>
createMessageManager(Mailbox<Long>
mailboxRow, MailboxSession session) throws MailboxException {
-        StoreMessageManager<Long>  result =  new
OpenJPAMessageManager(getMapperFactory(), getMessageSearchIndex(),
getEventDispatcher(), mailboxRow, useStreaming);
+        StoreMessageManager<Long>  result =  new
OpenJPAMessageManager(getMapperFactory(), getMessageSearchIndex(),
getEventDispatcher(), mailboxRow, feature);
         return result;
     }
  }

Modified:

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
URL:

http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java?rev=1145691&r1=1145690&r2=1145691&view=diff

==============================================================================
---

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
(original)
+++

james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
Tue Jul 12 17:40:49 2011
@@ -27,6 +27,7 @@ import javax.mail.internet.SharedInputSt
  import org.apache.james.mailbox.MailboxException;
  import org.apache.james.mailbox.jpa.JPAMessageManager;
  import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
+import
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMessage;
  import
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;
  import org.apache.james.mailbox.store.MailboxEventDispatcher;
  import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -40,30 +41,40 @@ import org.apache.james.mailbox.store.se
  */
  public class OpenJPAMessageManager extends JPAMessageManager {

-    private final boolean useStreaming;
+    private final AdvancedFeature feature;

+    public static enum AdvancedFeature {
+        None,
+        Streaming,
+        Encryption
+    }
+
     public OpenJPAMessageManager(MailboxSessionMapperFactory<Long>
mapperFactory, MessageSearchIndex<Long>  index,
             MailboxEventDispatcher<Long>  dispatcher, Mailbox<Long>
mailbox)
throws MailboxException {
-        this(mapperFactory, index, dispatcher, mailbox, false);
+        this(mapperFactory, index, dispatcher, mailbox,
AdvancedFeature.None);
     }

     public OpenJPAMessageManager(MailboxSessionMapperFactory<Long>
mapperFactory, MessageSearchIndex<Long>  index,
-            MailboxEventDispatcher<Long>  dispatcher, Mailbox<Long>
mailbox, final boolean useStreaming) throws MailboxException {
+            MailboxEventDispatcher<Long>  dispatcher, Mailbox<Long>
mailbox, final AdvancedFeature f) throws MailboxException {
         super(mapperFactory,  index, dispatcher, mailbox);
-        this.useStreaming = useStreaming;
+        this.feature = f;
     }

     @Override
protected Message<Long> createMessage(Date internalDate, int size,
int
bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder
propertyBuilder) throws MailboxException {
-        if (useStreaming) {
-            int headerEnd = bodyStartOctet -2;
-            if (headerEnd<  0) {
-                headerEnd = 0;
-            }
+        int headerEnd = bodyStartOctet -2;
+        if (headerEnd<  0) {
+            headerEnd = 0;
+        }
+        switch (feature) {
+        case Streaming:
             return new JPAStreamingMessage((JPAMailbox)
getMailboxEntity(),
internalDate, size, flags, content, bodyStartOctet, propertyBuilder);
-        } else {
+        case Encryption:
+            return new JPAEncryptedMessage((JPAMailbox)
getMailboxEntity(), internalDate, size, flags, content, bodyStartOctet,
propertyBuilder);
+        default:
             return super.createMessage(internalDate, size,
bodyStartOctet,
content, flags,  propertyBuilder);
         }
+
     }



Modified: james/mailbox/trunk/pom.xml
URL:

http://svn.apache.org/viewvc/james/mailbox/trunk/pom.xml?rev=1145691&r1=1145690&r2=1145691&view=diff

==============================================================================
--- james/mailbox/trunk/pom.xml (original)
+++ james/mailbox/trunk/pom.xml Tue Jul 12 17:40:49 2011
@@ -715,6 +715,11 @@
<artifactId>geronimo-jpa_2.0_spec</artifactId>
<version>1.1</version>
</dependency>
+<dependency>
+<groupId>org.jasypt</groupId>
+<artifactId>jasypt</artifactId>
+<version>1.7.1</version>
+</dependency>

<!--
         END OpenJPA



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


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




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



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

Reply via email to